无法在asp.net中动态添加多个服务器控件

嗨,我真的被困在我的一个开发任务中,因为几天后我无法找到确切的最新情况。 请帮忙。

我试图动态地向网页添加行,如下所示。 我想使用服务器控件。 但我无法添加多行。

即使我使用会话变量也没有运气。 请帮助请:)

—————– aspx文件—————

——————— C#代码背后————————– —-

 protected void addRow(object sender, EventArgs e) { int num_row = new int(); //checkpoint num_row = (tbl.Rows).Count; if (Session["tables"] != null) { tbl = (Table)Session["tables"]; } TableRow row = new TableRow(); TableCell cell1 = new TableCell(); TableCell cell2 = new TableCell(); TextBox tb = new TextBox(); CheckBox cb = new CheckBox(); row.ID = "rw" + num_row; cell1.ID = "c" + num_row + "1"; cell2.ID = "c" + num_row + "2"; tb.ID = "txt" + num_row; tb.EnableViewState = true; cb.ID = "chk" + num_row; cell1.Controls.Add(tb); cell2.Controls.Add(cb); row.Cells.Add(cell1); row.Cells.Add(cell2); tbl.Rows.Add(row); Session["tables"] = tbl; } 

您每次只能看到添加一行,因为动态创建的控件将无法在回发中使用。

当您第一次单击添加行时,会发生回发,添加第三行。 当您第二次单击添加行时,已添加的行将不可用,并再次添加新行。 最后,您每次只能看到一行。

最重要的是你必须在page_load事件中每次回发时重新创建动态添加的控件 ,原因是动态添加服务器sontrols donot在回发中持续存在

参考为什么当控件没有进行完全回发时,动态创建的用户控件会消失? 也

要维护动态添加控件的视图状态,必须为控件生成ID。 在回发期间重新创建控件时,请使用相同的ID重新创建控件,以便维护视图状态。

使用一些标准逻辑来生成控件的ID。 希望这可以帮助。

更新:

 protected void Page_Load(object sender, EventArgs e) { if (IsPostBack) { int num_row = (int)Session["No_of_Rows"]; for (int i = 2; i < num_row; i++) { TableRow row = new TableRow(); TableCell cell1 = new TableCell(); TableCell cell2 = new TableCell(); TextBox tb = new TextBox(); CheckBox cb = new CheckBox(); row.ID = "rw" + i; cell1.ID = "c" + i + "1"; cell2.ID = "c" + i + "2"; tb.ID = "txt" + i; tb.EnableViewState = true; cb.ID = "chk" + i; cell1.Controls.Add(cb); cell2.Controls.Add(tb); row.Cells.Add(cell1); row.Cells.Add(cell2); tbl.Rows.Add(row); } } else { Session["No_of_Rows"] = 2; } } protected void addRow(object sender, EventArgs e) { int num_row = (int)Session["No_of_Rows"]+1; TableRow row = new TableRow(); TableCell cell1 = new TableCell(); TableCell cell2 = new TableCell(); TextBox tb = new TextBox(); CheckBox cb = new CheckBox(); row.ID = "rw" + num_row; cell1.ID = "c" + num_row + "1"; cell2.ID = "c" + num_row + "2"; tb.ID = "txt" + num_row; tb.EnableViewState = true; cb.ID = "chk" + num_row; cell1.Controls.Add(cb); cell2.Controls.Add(tb); row.Cells.Add(cell1); row.Cells.Add(cell2); tbl.Rows.Add(row); Session["No_of_Rows"] = tbl.Rows.Count; } 

在tale列中输入值后如何保存数据库表中的所有值?