将表行和单元格添加和维护到ASP.net表

时间:2012-08-31 13:38:23

标签: c# asp.net viewstate asp.net-4.0

我有一个ASP.net表,我在运行时动态地向其中添加表行和单元格,还向这些单元格添加控件(文本框和标签)。我正在OnInit事件中创建并填充这些控件,希望它们将自动保存到视图状态。但他们不是!在每个回发中,表格被重置并显示为空。

我读了许多解决方案,比如将控件保存在Cache或Session中,或者手动将它们添加到view sate并手动将它们的值保存到view状态,但我想要一个直接的解决方案。就像你拖动任何asp.net组件一样,你忘了保持它的状态。

由于

2 个答案:

答案 0 :(得分:1)

每次都必须重建你的桌子。尝试在Page_Load事件上创建行和单元格。我假设您有一个asp:table服务器端控件,如:

<asp:Table ID="table" runat="server" />

在这种情况下,您可以在Page_Load上为其添加控件,并将值设置为:

    protected void Page_Load(object sender, EventArgs e)
    {
        TableRow row = new TableRow();
        TableCell cell = new TableCell();
        cell.Controls.Add(new TextBox());
        row.Cells.Add(cell);
        table.Rows.Add(row);
    }

你能尝试一下吗?

答案 1 :(得分:0)

正如tranceporter建议的那样,每次都必须添加表控件。但是,如果要在回发之间维护视图状态,则需要在PreInit事件中重建表,例如

protected void Page_PreInit(object sender, EventArgs e)
{
    TableRow row = new TableRow();
    TableCell cell = new TableCell();
    cell.Controls.Add(new TextBox());
    row.Cells.Add(cell);
    table.Rows.Add(row);
}

如果在PreInit事件中创建了控件,那么ASP.NET框架将在页面Init和Load事件触发之前将视图状态应用于控件。有关ASP.NET页面生命周期的更多详细信息,请参见此处:

http://msdn.microsoft.com/en-us/library/ms178472(v=VS.100).aspx