我打算创建一个动态表,附带条件是每次单击按钮我都可以向该表添加一行。
我正在使用以下代码,但它不起作用。
我第一次点击按钮运行,但是第二次必须添加第二行它不会这样做,并且只有一行被添加到前一行。
在页面
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 :(得分:0)
这是PostBack和ViewState的问题。 ASP.NET不保存ViewState for Table控件。这意味着如果你想在回发期间保留表数据,你需要在每个帖子上绑定表格。
您可以做的是将表值保存在ViewState对象中。然后编写一个使用ViewState对象创建表的函数。在按钮的on click事件中,向视图状态对象添加其他行,然后再次调用该函数以重新创建表。这看起来很简单,但主要的问题是如果表中有其他控件,如TextBox,DropDownList等,那么它们在回发后不会保留值,因为我们每次都在重新创建表。
通过查看所有这些问题,我会考虑使用像Repeater这样的DataBound控件,您可以根据要创建的行数来构建表。如果需要,您还可以处理动态控件。