- PR -

DataGrid(WindowsForm)で入力値検証のメッセージ

1
投稿者投稿内容
うぃず
会議室デビュー日: 2003/12/11
投稿数: 7
投稿日時: 2004-06-23 14:40
こんにちは。
C#.NETで開発しています。

以下の様に、DataGridコントロールのRowChangingイベントで入力値の検証をしようと思っています。

ソース抜粋:----
新規プロジェクトでDataGridを貼り付けて以下のコードを追加しました。

private void Form1_Load(object sender, System.EventArgs e)
{
DataTable table = new DataTable();
table.Columns.Add("hoge1");
table.Columns.Add("hoge2");

table.RowChanging += new DataRowChangeEventHandler(OnRowChanging);

dataGrid1.SetDataBinding(table, "");
}

private void OnRowChanging(object sender, DataRowChangeEventArgs args)
{
if (args.Row["hoge2"] == DBNull.Value)
{
//「オリジナルのデータストアに行をコミット中にエラーが発生しました。」
//というタイトルでダイアログが表示される。
throw new Exception("NULL不可");
}
}
----

Exceptionをthrowするとダイアログが出るのはいいのですが、タイトルが気に入りません(^^;
このタイトルを変更することは可能なのでしょうか。

よろしくお願いいたします。
Os_
ベテラン
会議室デビュー日: 2003/04/16
投稿数: 77
投稿日時: 2004-06-24 14:00
Osです。
直接の回答ではないのですが、レスがないので
別の対応策として一例をあげます。目的に合わなければ無視してください。

何か訳があってRowChangingイベントで対応されていると思いますが、
DataGridの入力検証はもっと上流のColumnChangingイベントでも対応が可能です。
この場合、例外はDataGrid内で吸収されダイアログが表示されることは無かったかと思います。また、セル移動時に検証されるので、即時性があるかと思います。

試していませんが、もしメッセージが必要であれば、イベント内の個別に定義可能かと思います。

うぃず
会議室デビュー日: 2003/12/11
投稿数: 7
投稿日時: 2004-06-25 10:19
レスありがとうございます。

RowChangingイベントで処理しているのは、
正しい値を入れるか、値を元に戻すまで、その行の編集から抜けられなくしたかったのです。
このイベントでExceptionをthrowすると、簡単に実現できる様なのですが、ダイアログのタイトルが不自然に感じましたので、何とかならないものかと思ったしだいです。

で、Os_さんの回答などを参考に違う方法も試してみたのですが、
1.ColumnChangingイベントでチェック
2.異常値ならMessageBox.Show
3.セルは移動してしまうので、Row.SetColumnErrorとRow.RowErrorに設定しておく

private void OnColumnChanging(object sender, DataColumnChangeEventArgs args)
{
if (args.Column.ColumnName == "hoge2")
{
if (args.ProposedValue == DBNull.Value)
{
MessageBox.Show("hoge2でNullは指定できません。");
args.Row.SetColumnError("hoge2", "Nullは指定できません。");
args.Row.RowError = "hoge2でNullは指定できません。";
}
else
{
args.Row.ClearErrors();
}
}
}

というのが、今のところ、やりたいことに一番近くて簡単な方法かなと。

自分でRowChangingイベントでの動作を実装してみようかとも思ったのですが、
行の編集から抜けられなくする方法がわからりませんでした(^^;

とりあえず、ColumnChangingイベントでチェックする方向で検討してみようと思います。
1

スキルアップ/キャリアアップ(JOB@IT)