2014-07-09 6 views
0

버튼을 클릭 할 때마다 해당 테이블에 행을 추가 할 수있는 동적 테이블을 만들려고합니다.asp.net의 테이블에 행과 열을 동적으로 추가하는 방법

다음 코드를 사용하고 있지만 작동하지 않습니다.

처음 버튼을 클릭하면 실행되지만 두 번째 행에는 두 번째 행이 추가되어야합니다. 두 번째 행에는 두 번째 행이 추가되지 않아 이전 행에 하나의 행만 추가됩니다. 버튼에서 페이지

DropDownList[] dlsathetasilat = new DropDownList[50]; 
    Label[] lblradif = new Label[50]; 
    TextBox[] txtreshtetahsili = new TextBox[50]; 
    TextBox[] txtmoasese = new TextBox[50]; 
    TextBox[] txtcity = new TextBox[50]; 
    TextBox []txtdateakhz = new TextBox[50]; 
    CheckBox[] chmadrakmoadel = new CheckBox[50]; 

    TableCell []tc = new TableCell[7]; 

    static int i=0; 

에서

:

TableRow tr = new TableRow(); 
      lblradif[i] = new Label(); 
      lblradif[i].Text = (i + 1).ToString(); 
      lblradif[i].CssClass = "lbl"; 
      dlsathetasilat[i] = new DropDownList(); 
      dlsathetasilat[i].Items.Add("دیپلم"); 
      dlsathetasilat[i].CssClass = "dl"; 

      txtreshtetahsili[i] = new TextBox(); 
      txtreshtetahsili[i].CssClass = "dl"; 
      txtmoasese[i] = new TextBox(); 
      txtmoasese[i].CssClass = "dl"; 
      txtdateakhz[i] = new TextBox(); 
      txtdateakhz[i].CssClass = "dl"; 
      txtcity[i] = new TextBox(); 
      txtcity[i].CssClass = "dl"; 
      chmadrakmoadel[i] = new CheckBox(); 
      chmadrakmoadel[i].CssClass = "d2"; 


      for (int k = 0; k < 7; k++) 
       tc[k] = new TableCell(); 

      tc[0].Controls.Add(lblradif[i]); 
      tc[1].Controls.Add(dlsathetasilat[i]); 
      tc[2].Controls.Add(txtreshtetahsili[i]); 
      tc[3].Controls.Add(txtmoasese[i]); 
      tc[4].Controls.Add(txtcity[i]); 
      tc[5].Controls.Add(txtdateakhz[i]); 
      tc[6].Controls.Add(chmadrakmoadel[i]); 

      for (int j = 0; j < 7; j++) 
       tr.Controls.Add(tc[j]); 

      Table1.Rows.Add(tr); 

      i++; 

답변

0

이것은 다시 게시와의 ViewState의 문제입니다. ASP.NET은 Table 컨트롤에 대한 ViewState를 저장하지 않습니다. 즉, 다시 게시하는 동안 테이블 데이터를 유지하려면 모든 게시물에 대해 테이블을 바인딩해야합니다.

ViewState 개체에 테이블 값을 저장하면됩니다. 그런 다음 ViewState 객체를 사용하여 테이블을 만드는 함수를 작성합니다. 단추의 클릭 이벤트에서 뷰 상태 개체에 행을 추가 한 다음 함수를 다시 호출하여 테이블을 다시 만듭니다. 이것은 매우 간단하게 보입니다. 그러나 주된 문제는 TextBox, DropDownList 등과 같은 테이블에 추가 컨트롤이 있으면 다시 게시 할 때 값을 유지하지 않는다는 것입니다. 왜냐하면 매번 테이블을 다시 생성하기 때문입니다.

이러한 모든 문제를 살펴보면 만들려는 행 수에 따라 테이블을 작성할 수있는 Repeater와 같은 DataBound 컨트롤을 사용하는 것이 좋습니다. 또한 원하는 경우 동적 컨트롤을 처리 할 수 ​​있습니다.

관련 문제