表控制数据持久性ASP.net C#

时间:2014-08-28 13:57:03

标签: c# asp.net webforms

我正在创建一个asp.net/c#网站,我遇到了表格控件的数据持久性问题,

我必须多次从一组文本框中动态地向表中添加行,因此,众所周知,http是无状态的我每次添加一个时都会在Session对象中保存表内容新行,然后在page_load事件中我尝试从Session检索数据并将其添加到表中,但它不会再次加载。我调试了我的代码,并且每次回发都会增加表行数,所以我知道我的方法有效,但我不知道为什么它不能正确呈现表

这是我的代码的简化版本,它显示了我的问题(它也不能用于LOL)

<div>
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
    <asp:Table ID="Table1" runat="server" ViewStateMode="Disabled" EnableViewState="False">
        <asp:TableRow>
            <asp:TableHeaderCell>
                Nombres
            </asp:TableHeaderCell>
        </asp:TableRow>
    </asp:Table>
</div>

protected void Page_Load(object sender, EventArgs e)
{
        if (IsPostBack)
        {
            if (Session["mtable"] != null)
            {
                Table1 = (Table)Session["mtable"];
            }
        }
}

protected void Button1_Click(object sender, EventArgs e)
{
        TableCell tc = new TableCell();
        tc.Text = TextBox1.Text;
        TableRow tr = new TableRow();
        tr.Cells.Add(tc);
        Table1.Rows.Add(tr);
        Session["mtable"] = Table1;
}

请帮忙,谢谢

1 个答案:

答案 0 :(得分:0)

启用viewstate不会改变任何内容: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.table(v=vs.110).aspx

  

重要的是要记住,对表格行或单元格的任何编程添加或修改都不会在帖子中保留到服务器。这是因为表行和单元格是它们自己的控件,而不是Table控件的属性。要保留对表的任何更改,必须在每次回发后重建行和单元格。

你必须重建你的桌子。这种方式例如:

List<String> data = new List<String>();

protected void Page_Load(object sender, EventArgs e)
{
    if (Session["mtable"] != null)
    {
        data = (List<String>)Session["mtable"];
    }
    if (!IsPostBack) BuildTable();
}

protected void BuildTable()
{
    if (Session["mtable"] != null)
    {
        foreach (String s in data)
        {
            TableCell tc = new TableCell();
            tc.Text = s;
            TableRow tr = new TableRow();
            tr.Cells.Add(tc);
            Table1.Rows.Add(tr);
        }
    }
}

protected void Button1_Click(object sender, EventArgs e)
{
    data.Add(TextBox1.Text);
    Session["mtable"] = data;
    BuildTable();
}

如果您有复杂的数据,请使用gridview并将其绑定到可以保存在Session变量中的数据表对象。