如何在按钮中动态地向asp.net中的表添加行和列

时间:2014-07-09 15:25:54

标签: asp.net button rows

我打算创建一个动态表,附带条件是每次单击按钮我都可以向该表添加一行。

我正在使用以下代码,但它不起作用。

我第一次点击按钮运行,但是第二次必须添加第二行它不会这样做,并且只有一行被添加到前一行。

在页面

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++;

1 个答案:

答案 0 :(得分:0)

这是PostBack和ViewState的问题。 ASP.NET不保存ViewState for Table控件。这意味着如果你想在回发期间保留表数据,你需要在每个帖子上绑定表格。

您可以做的是将表值保存在ViewState对象中。然后编写一个使用ViewState对象创建表的函数。在按钮的on click事件中,向视图状态对象添加其他行,然后再次调用该函数以重新创建表。这看起来很简单,但主要的问题是如果表中有其他控件,如TextBox,DropDownList等,那么它们在回发后不会保留值,因为我们每次都在重新创建表。

通过查看所有这些问题,我会考虑使用像Repeater这样的DataBound控件,您可以根据要创建的行数来构建表。如果需要,您还可以处理动态控件。