DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGridViewのDataErrorイベントについて

環境/言語:[開発pc xp ]
分類:[.NET]

お世話になります。

DataGridViewを使って、入力された値が数値以外なら(=null)、DataErrorイベント
で拾ってエラーと表示させようとしているのですが、なぜか同じプロパティ
の設定でも、DataErrorイベントが拾えないセルが出ています。

DataGridViewには、DBを読込む際のデータセットがバインドしてあります。

データセットの数値はNsu1とNsu2で設定してあり、Nsu2の方は、思いとおり
nullならばエラーを拾ってくれます。Nsu1がうまく動いてくれません。
二つとも、”AllowDBNull”がFalse、”DataType”がSystem.Decimal”
”NullValue”は(Throw exception)です。

Nsu2の”DataType”をSystem.stringに変えるとエラーは拾えなくなります。
”DataType”が関係してるとおもうのですが同じ設定をしても
同じに動きになりません。
どこか他に考えられるところはありますでしょうか?
■No24388に返信(RENさんの記事)
「こんな現象が起こる」ことはわかりましたが、
現象を起こす原因があると思われるDataErrorイベントに
どんなコードが書かれているのかわからないため正直なんともいえません。


とりあえず現在の質問文から読み取れる範囲内で、
以下の環境にて試してみましたが……

・VS2005:C#(こちらで試しやすいので…。VBでも恐らく処理内容は同じです。)
・DataGridView×1 DataSet×1:内部に2列だけのDataTable(TableAdapterではない)
・DataGridViewの設定はデフォルトのまま
・DataTableの列は質問内容どおりにAllowDBNull = False、Nullvalue = Throw Exception
・バインドは画面Load時にDataGridViewのDataSourceに直に設定
・読み込んで表示した直後に、任意のセル内のデータをNULLにすることでDataErrorを発生させる
・DataErrorイベントの内容は以下の通り
 (※この掲示板のホームであるどぼん!さんのTIPS
 http://dobon.net/vb/dotnet/datagridview/dataerror.html
 から拝借させて頂きました)
private void DataGridView1_DataError(object sender,
    DataGridViewDataErrorEventArgs e)
{
    if (e.Exception != null)
    {
        MessageBox.Show(this,
            string.Format("({0}, {1}) のセルでエラーが発生しました。\n\n説明: {2}",
            e.ColumnIndex, e.RowIndex, e.Exception.Message),
            "エラーが発生しました",
            MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}


少なくとも以上の条件においては、
片方の列のDataTypeをDecimalからStringに変えただけでエラーが発生しなくなることはなく、
また両方ともDecimalの状態でもエラーを補足することができました。

一度、本番用とは別に
現象を追うための最低限のコントロールを置いたテスト用のプログラムを組んで
「どこでどんな処理を入れたときに」その現象がおきたか、を段階的に確認してみると良いかと思います。
■No24389に返信(カドルドエグさんの記事)
> ■No24388に返信(RENさんの記事)
> 「こんな現象が起こる」ことはわかりましたが、
> 現象を起こす原因があると思われるDataErrorイベントに
> どんなコードが書かれているのかわからないため正直なんともいえません。
>
>
> とりあえず現在の質問文から読み取れる範囲内で、
> 以下の環境にて試してみましたが……
>
> ・VS2005:C#(こちらで試しやすいので…。VBでも恐らく処理内容は同じです。)
> ・DataGridView×1 DataSet×1:内部に2列だけのDataTable(TableAdapterではない)
> ・DataGridViewの設定はデフォルトのまま
> ・DataTableの列は質問内容どおりにAllowDBNull = False、Nullvalue = Throw Exception
> ・バインドは画面Load時にDataGridViewのDataSourceに直に設定
> ・読み込んで表示した直後に、任意のセル内のデータをNULLにすることでDataErrorを発生させる
> ・DataErrorイベントの内容は以下の通り
>  (※この掲示板のホームであるどぼん!さんのTIPS
>  http://dobon.net/vb/dotnet/datagridview/dataerror.html
>  から拝借させて頂きました)
> private void DataGridView1_DataError(object sender,
> DataGridViewDataErrorEventArgs e)
> {
> if (e.Exception != null)
> {
> MessageBox.Show(this,
> string.Format("({0}, {1}) のセルでエラーが発生しました。\n\n説明: {2}",
> e.ColumnIndex, e.RowIndex, e.Exception.Message),
> "エラーが発生しました",
> MessageBoxButtons.OK, MessageBoxIcon.Error);
> }
> }
>
>
> 少なくとも以上の条件においては、
> 片方の列のDataTypeをDecimalからStringに変えただけでエラーが発生しなくなることはなく、
> また両方ともDecimalの状態でもエラーを補足することができました。
>
> 一度、本番用とは別に
> 現象を追うための最低限のコントロールを置いたテスト用のプログラムを組んで
> 「どこでどんな処理を入れたときに」その現象がおきたか、を段階的に確認してみると良いかと思います。

カドルドエグさん 返信が遅くなり申し訳ありません。 
結局再作成を行っているうちにエラーがでなくなりました。

ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板