none
DataTableのColumnChangingイベント内で編集をキャンセルしたい RRS feed

  • 質問

  • はじめまして。futaと申します。

     

    DataTableのDataRowの列値の編集を、DataTableのColumnChangingイベントハンドラ内でキャンセルしたいのですが、うまくいきません。

    何が悪いのか、お分かりになる方はぜひ教えていただけますでしょうか。

    環境はVS2003で、型指定されたデータセットを使用しています。

     

    (フォームのコンストラクタ内)

    dataSet1.dataTable1.ColumnChanging += new DataColumnChangeEventHandler(dataTable1_ColumnChanging);

    oleDbDataAdapter1.Fill(dataSet1.dataTable1);

    System.Data.DataRow row = dataSet1.dataTable1.Rows[0];

    row.BeginEdit();

    row["USER_NAME"] = "";

    //(1)

    row.EndEdit(); //この行はあってもなくてもうまくいきません

    System.Diagnostics.Debug.WriteLine(row["USER_NAME"]);

     

    (同じフォームの中のイベントハンドラ)

    public void dataTable1_ColumnChanging(object sender, System.Data.DataColumnChangeEventArgs e)

    {

        if (e.Column.ColumnName.Equals("USER_NAME"))

        {

            if (e.ProposedValue.ToString().Equals(""))

            {

                e.Row.CancelEdit(); //(2)

            }

        }

    }

     

    ※(2)をコメントアウトし、(1)をrow.CancelEdit(); にするとちゃんと編集がキャンセルされます。

    2007年4月26日 5:39

回答

  • ColumnChangingはデータテーブルに値を書き込む前に発生します。一方、CancelEditは、データテーブルに値が書き込まれた後、それを確定せずにキャンセルする場合に用います。なので、CancelEditをColumnChangingイベントで使用するのは適切ではありません。
    2007年4月26日 8:35
    モデレータ

すべての返信

  • ColumnChangingはデータテーブルに値を書き込む前に発生します。一方、CancelEditは、データテーブルに値が書き込まれた後、それを確定せずにキャンセルする場合に用います。なので、CancelEditをColumnChangingイベントで使用するのは適切ではありません。
    2007年4月26日 8:35
    モデレータ
  • そうですか!なるほどよくわかりました。

    MSDNのサンプルにもColumnChangingイベントハンドラではなく、

    ColumnChangedイベントハンドラ内でCancelEditしているサンプルが

    ありましたのでその方法で実装してみます。

    どうもありがとうございました。

    2007年4月27日 1:15