c#-数据表中的列消失

我有一个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尽管在页面加载时成功创建了零列(通过调试和其他测试),但它们的列为零.专栏似乎完全消失了.有人可以告诉我为什么会这样,当然,如何解决它.

解决方法:

您会丢失回发数据.那很正常您必须使用一些状态管理机制(例如ViewState或Session)来提及其中的一些.

您可以使用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; }
}
上一篇:使用jquery.datatable.js注意事项


下一篇:如何使用C#将DataTable值转换为json?