■25111 / inTopicNo.2) |
Re[1]: BindingSource_AddingNewを教えて下さい |
□投稿者/ カドルドエグ (24回)-(2008/09/15(Mon) 18:25:38)
|
■No25104 (たこやき さん) に返信
> たずねるばかりで申し訳ないのですが、
> レコードの追加時に初期値を設定しようと思うのですが、うまくいきません。
> どこがいけないのでしょうか。ご指導ください。
>
> 先に次のようにレコードを抽出しています。
>
> void レコード抽出()
> {
> var aa =
> from p in myDataSet.TBL
> where p.FLD.Length < 3
> select p;
>
> myBindingSource.DataSource = aa.AsDataView();
> }
>
> その後、BindingSourceのAddingNewイベントで初期値を設定しようとしているのですが、
> e.NewObject行でエラーが発生します。
> 「BindingSource の一覧に追加されるオブジェクトは、同一の型でなければなりません。」と。
> 参考例が見つからなくて、どうすればいいのかわかりません。お願いします。
>
> private void myBindingSource_AddingNew(object sender, AddingNewEventArgs e)
> {
> DataRow dr = myDataSet.TBL.NewRow();
> dr["列1"] = "山田";
> dr["列2"] = "太郎";
>
> e.NewObject = (myDataSet.TBLRow)dr; <-- エラー発生
> }
BindingSource.AddingNew イベント
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.bindingsource.addingnew(VS.80).aspx
エラーおよび上記のヘルプのとおり、
「リストに格納されている型と同じ型であることが必要」なのです。
そして、
「DataView または DataTable にバインドされている場合は、新しい DataRowView をリストに追加できないため、NewObject プロパティを設定することはできません。」
ともあります。
因みに、バインドされているLINQの結果はDataViewの拡張型にあたります。
なのでそのままLINQを使用したい場合は、
「myDataSet.TBLRow型」ではなく、myDataSet.TBLのDataViewを
e.NewObjectに代入するとよいと思います。
---- イメージコード ----
※テスト用に右のグローバル変数を前提→private DataSet1 myDataSet = new DataSet1();
※DataSet1にはTBLというテーブルがある
※TBLには「C1」「C2」「FLD」という列がある
private void bindingSource1_AddingNew(object sender, AddingNewEventArgs e)
{
DataSet1.TBLRow row = myDataSet.TBL.NewTBLRow();
row.C1 = "yamada";
row.C2 = "tarou";
row.FLD = "TEST";
myDataSet.TBL.AddTBLRow(row);
DataView view = new DataView(myDataSet.TBL);
e.NewObject = view;
}
|
|