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 イベントが呼び出される 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 に答える