次のようにBindingSourceが設定されているDataGridViewがあるとします。
WinFormで、myBindingScourceと呼ばれるデザイナを使用してBindingSourceオブジェクトを追加します。次に、Form.Designer.csで、これをInitializeComponents()に追加します。
myBindingSource.DataSource = typeof(MyLinq.Person); //Mylinq is the autogenerated Linq Model/Diagram
後で、フォーム自体で次のようにします。
myDataView.DataSource = myBindingSource;
次に、グリッドにデータを入力するメソッドがあります…</ p>
using ( myDataContext mdc = new MyDataContext() )
{
myDataView.DataSource = from per in mdc.person
select per;
}
余談ですが、デザインタイムで列を設定しましたが、すべて問題ありません。LINQ 2 SQLは匿名を返さないため、「myDataView」は編集可能であり、ここに質問があります…</ p>
質問は:これらの変更をどのように永続化するのですか?
データグリッドには数十のイベントがあり、どれがより適切かわかりません。イベントの1つを試しても、変更を永続化するためにそれらの変更をDBに送り返すために実行する必要のあるコードがわかりません。
ADO.NET DataSetの時代に、dataadapter.Update(dataset);を実行したことを覚えています。
また、retrieveとpersist()の両方がビジネスレイヤー上にあり、メソッドシグネチャが次のようになっていることを想像してください。
public void LoadMyDataGrid(DataGridView grid);
そのメソッドはフォームのグリッドを取得し、上記のLINQ2SQLクエリを使用してフォームに入力します。
次に、次のようなメソッドを作成します。
public void SaveMyDataGrid(DataGridView grid); // or similar
このメソッドは同じクラス(フォーム)上にないという考え方です。多くの例では、すべてが一緒であると想定する傾向があります。