1

我有这个数据表

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 事件被调用时,它会在 line 中显示一个错误 datarow = dt.Select( dt.Columns["col1"] + DropDownList1.SelectedValue); ,表示该列不存在。执行 selectedIndexChanged 时,数据表中的所有行和列都会从数据表中丢失。我在这里想念什么?

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

4

3 回答 3

3

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

于 2010-08-10T19:36:53.533 回答
1

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

于 2010-08-10T19:36:41.423 回答
1

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

于 2010-08-10T19:37:46.593 回答