c# - DataTable 中的列消失

标签 c# asp.net datatable

我有一个数据表,其中包含在页面加载时生成的列。由于我不希望每次回发时都重新创建此表,因此我将其放在无回发 if 语句中。即:

DataTable purchase_display_data = new DataTable();

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        DataColumn rownumber = new DataColumn();
        rownumber.DataType = System.Type.GetType("System.Int16");
        rownumber.AutoIncrement = true;
        rownumber.AutoIncrementSeed = 1;
        rownumber.AutoIncrementStep = 1;

        purchase_display_data.Columns.Add(rownumber);
        purchase_display_data.Columns.Add("Item");
        purchase_display_data.Columns.Add("Charge");
    }
}

稍后,我尝试在按下按钮后添加数据。与:

protected void buttonOK_Click(object sender, EventArgs e)
{
    DataRow newline = purchase_display_data.NewRow();
    newline[1] = "1";
    newline[2] = "2";
    purchase_display_data.Rows.Add(newline);
}

按下所述按钮后,我返回一条错误消息,指出未找到该列。在调试中,我注意到我的 DataTable 有零列,尽管在页面加载时成功创建了它们(每个调试和其他测试)。这些列似乎只是消失了。谁能告诉我为什么会发生这种情况,当然还有如何解决。

最佳答案

您丢失了有关回发的数据。这很正常。您必须使用一些状态管理机制,例如 ViewStateSession 等等。

您可以使用 ViewState 试试这个:

private DataTable purchase_display_data
{
    get
    {
        if (ViewState["purchase_display_data"] == null)
            ViewState["purchase_display_data"] = new DataTable();
        return (DataTable)ViewState["purchase_display_data"];
    }
    set { ViewState["purchase_display_data"] = value; }
}

关于c# - DataTable 中的列消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30650204/

相关文章:

laravel - 如何在laravel数据表中添加行号或序列号

c# - SQL 服务器 : parameter not evaluating in AND part of clause

c# - 我可以在 C# DocumentDb 驱动程序中使用多态/继承吗

c# - 无法在我的 DataGrid 中使用类型化的 DataRowView

c# - 在用户控件(代码隐藏)中为 wpf 文本框更改 'isenabled'

jQuery DataTables - 英国日期列排序

c# - Html Agility Pack如何在页面加载后获取动态生成的内容

c# - 根级别的数据无效。第 1 行,位置 1。读取 xml 时

c# - 使用 DataGrid/GridView 控件表示分层数据

c# - 如何使用过滤器从 C# 中的 DataTable 中删除行?