ASP.net DataTable不存储新行

时间:2010-03-16 02:30:20

标签: asp.net datatable

在我的简单入门asp页面中,我创建了一个DataTable并用两行填充它。该网站允许用户添加新行。我的问题是DataTable不保存信息。我已经逐步完成了代码并添加了行,但是下次添加一行时它不存在,只有原来的两行和最新的一行才能输入。

我以一种不雅的方式解决了这个问题,但我真的很好奇为什么要保存新行。

我的代码:

    protected void Page_Load(object sender, EventArgs e)
    {
        _Default.NameList = new DataTable();
        DataColumn col = new DataColumn("FirstName", typeof(string));
        _Default.NameList.Columns.Add(col);
        col = new DataColumn("LastName", typeof(string));
        _Default.NameList.Columns.Add(col);
        DataRow row = _Default.NameList.NewRow();
        row["FirstName"] = "Jane";
        row["LastName"] = "Smith";
        _Default.NameList.Rows.Add(row);
        row = _Default.NameList.NewRow();
        row["FirstName"] = "John";
        row["LastName"] = "Doe";
        _Default.NameList.Rows.Add(row);
    }

    protected void AddButton_Click(object sender, EventArgs e)
    {
        DataRow row = _Default.NameList.NewRow();
        row["FirstName"] = this.TextBox1.Text;
        row["LastName"] = this.TextBox2.Text;
        _Default.NameList.Rows.Add(row);
        _Default.NameList.AcceptChanges(); // I've tried with and without this.
    }

我已经尝试将它们保存到GridView控件,但这似乎有点工作。 我是ASP.Net的新手,但在过去的两年里用C#进行了Windows编程。

3 个答案:

答案 0 :(得分:1)

每次加载页面时,您都会创建一个新的DataTable对象。

您需要将DataTable对象持久保存到会话状态或静态变量,或将数据保存到数据库。

答案 1 :(得分:0)

请记住,处理按钮点击等事件需要完整回发。您不运行单击代码,而是在页面类的新实例上运行整个页面生命周期。页面类的新实例也意味着数据表的新实例。

答案 2 :(得分:0)

这里的问题是,每次页面加载时都会创建DataTable,当页面加载完成并显示给用户后,它会超出范围。要获得所需的效果,您需要将DataTable存储在Session,ViewState,缓存中,使用GridView之类的控件,它将自动将基础数据存储在其状态中,或其他内容。

由于您不熟悉ASP.NET,请查看state management的选项。