2009-08-19 5 views
1

버튼을 클릭하면 런타임에 드롭 다운 목록을 만들었습니다. 동적 드롭 다운 목록에서 선택한 텍스트를 가져 오기 위해 다른 버튼을 보았습니다. 드롭 다운 목록에서 선택한 텍스트를 가져 오려고하면 오류가 발생했습니다. 개체 참조가 설정되지 않은 경우, 다음은 내 코드입니다.asp.net에서 동적 드롭 다운 목록

TableRow tr; 
    TableCell tc; 
    DropDownList dp; 
    TextBox txt; 
    protected void Button1_Click(object sender, EventArgs e) 
    { 

     int no = int.Parse(TextBox1.Text); 
     for (int i = 0; i < no; i++) 
     { 
      tr = new TableRow(); 
      tr.BorderStyle = BorderStyle.Groove; 
      for (int j = 0; j < 1; j++) 
      { 
       tc = new TableCell(); 
       tc.BorderStyle = BorderStyle.Groove; 
       dp = new DropDownList(); 
       //form1.Controls.Add(dp); 
       txt = new TextBox(); 
       dp.Items.Add("hello"); 
       tc.Controls.Add(dp); 
       tc.Controls.Add(txt); 
       tr.Cells.Add(tc); 
      } 

      Table1.Rows.Add(tr); 

     } 
    } 
    protected void Button2_Click(object sender, EventArgs e) 
    { 

     TextBox1.Text =((DropDownList)this.FindControl("dp")).SelectedItem.Text; 


    } 

답변

4

이렇게하면 안됩니다. 모든 요청에서 페이지 개체가 있고 새 컨트롤이있는 복사본이 있다는 것을 기억하십시오. 동적으로 추가하는 컨트롤은 매번 같은 방식으로 추가해야합니다. 그렇지 않으면 존재하지 않습니다.

이 경우 버튼을 클릭하면 한 번 추가됩니다. button2를 클릭하면 button1 처리기에만 추가되므로 요청이 생성되고 더 이상 드롭 다운 목록이없는 새 페이지 객체가 만들어집니다.

가장 쉬운 방법은 드롭 다운 목록을 페이지에 정상적으로 추가하는 것입니다.하지만 Visible을 false로 설정하면됩니다. 그런 다음 버튼 1을 클릭하면 보이기를 참으로 설정합니다. 이렇게하면 드롭 다운 목록이 항상 표시됩니다.

동적 컨트롤은 까다 롭고 가능한 경우 특히 ASP.Net을 처음 사용하는 경우에는 피해야합니다. 내가 전문가 또는 아무것도, 나는 단지 펙 아니에요

tc = new TableCell(); 
    dd= new DropDownList(); 
    ddl.ID = dd1; 

    foreach (DataRow dr in dst.Tables[0].Rows) 
    { 
     ddl.Items.Add(new ListItem(dr["Text"].ToString(),dr["Value"].ToString())); 
    } 
    tcActions.Controls.Add(ddlActions); 

:

0

사실, 난

내가 다음에 앞서 테이블 작성의 데이터 집합을 만들어 .. 그것이 작동되도록 할 수 있었다 내가 원하는대로 할 때까지.