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

 2022-01-08 

datatable columns not accessible C# ASP.NET

我有这个数据表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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 时,数据表中的所有行和列都会从数据表中丢失。我在这里错过了什么?

我想避免将数据表存储在会话或视图状态中。另外,问题是为什么数据表会变空。有没有办法避免重新填充数据表所有有回发的东西?
如果我有一个字符串类变量在回发后不为空或不为空。


删除 if (!IsPostBack) ...。您必须在每次回发时填充数据表 dt,因为您没有将其存储在视图状态或会话中的任何位置...。


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


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