2009年6月1日月曜日

[.NET]型付DataSetの入力検証を一時的に保留する

.NET Frameworkで提供されている型付DataSetは便利なクラスです。
簡単なデータ構造を一時保存したい場合や、DBの取得結果をキャッシュしたい場合などに特に便利です。
しかし、フィールドのに制約をつけるとプロパティをセットした瞬間にエラーとなります。それをすべてのフィールドをセットした後にチェックする方式にできないかなぁと思っていたら、DataRow.BeginEditをつかえば実現できるということがわかりました。コードはこんな感じ。

TestDataSet.DataTable1DataTable dt = new TestDataSet.DataTable1DataTable();
TestDataSet.DataTable1Row row = dt.NewDataTable1Row();

//インクリメントタイプのフィールド
row.AutoIncKey = 1;
//桁数指定(Max3桁)
row.LimitData = "abc";
//NotNull
row.NotNullData = "123";

dt.Rows.Add(row);

TestDataSet.DataTable1Row row2 = dt.NewDataTable1Row();
row2.AutoIncKey = 2;
row2.LimitData = "cde";
row2.NotNullData = "456";

dt.Rows.Add(row2);
dt.AcceptChanges();

dt[1].BeginEdit();

//キー重複
dt[1].AutoIncKey = 1;
//桁数オーバー
dt[1].LimitData = "4567";
//NotNull
dt[1].NotNullData = null;

//BeginEditするとEndEditまたはAcceptChangesまでチェックが保留される
dt[1].EndEdit();
dt.AcceptChanges();

0 件のコメント: