DataTable 中的列消失
Columns in DataTable Disappearing
我有一个数据表,其中包含在页面加载时生成的列。由于我不希望每次回发时都重新创建此 table,因此我将其放在无回发 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);
}
按下所述按钮后,我 return 出现错误,指出未找到该列。在调试中,我注意到我的 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; }
}
我有一个数据表,其中包含在页面加载时生成的列。由于我不希望每次回发时都重新创建此 table,因此我将其放在无回发 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);
}
按下所述按钮后,我 return 出现错误,指出未找到该列。在调试中,我注意到我的 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; }
}