数据表列不可访问C#ASP.NET

时间:2010-08-10 19:33:22

标签: c# datatable pageload

我有这个数据表

public partial class class1
{
  private DataTable dt;
  protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
           dt.Columns.Add("Col1", System.Type.GetType("System.String"));
           dt.Columns.Add("Col2", System.Type.GetType("System.String"));
           bind();
        }
    }
}

private void bind()
{
    //database call
    //loop 
    dt.Rows.Add(col1_value.ToString(), col2_value.ToString(), col3.ToString());
    // populate the dropdown list with the database entries
}

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
   DataRow[] datarow;
   variable1=  DropDownList1.SelectedValue;
   datarow = dt.Select( dt.Columns["col1"] + DropDownList1.SelectedValue);
   variable2 = datarow.GetValue(1).ToString();
}

调用selectedindexchange事件时,它会在行中显示错误 datarow = dt.Select( dt.Columns["col1"] + DropDownList1.SelectedValue); ,说该列不存在。执行selectedIndexChanged时,数据表中的所有行和列都会从数据表中丢失。我在这里缺少什么?

我想避免在会话或视图状态中存储数据表。此外,问题是为什么数据表变空。无论如何要避免重新填充数据表所有回帖? 如果我有一个字符串的类变量,它在回发后不会变空或执行它。

3 个答案:

答案 0 :(得分:3)

删除if (!IsPostBack) ....每次回发时都必须填充数据表dt,因为你没有将它存储在viewstate或session中的任何地方....

答案 1 :(得分:1)

您正在Page_Load事件中以编程方式添加列。 SelectedIndexChanged事件导致回发,并且Page_Load中的逻辑仅在请求不是回发时添加列。这意味着每个回发都不会添加列,如果要以编程方式添加它们,则必须是这些列。

答案 2 :(得分:1)

可能是因为您的条件(if (!IsPostBack)), indexchanged 事件导致回发,因此列永远不会添加到数据表中。 你应该摆脱这种情况或在另一个地方填充你的数据表(maby甚至你的eventhandler用于indexchanged事件)。