1

次のように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

このメソッドは同じクラス(フォーム)上にないという考え方です。多くの例では、すべてが一緒であると想定する傾向があります。

4

2 に答える 2

3

RowValidatedイベントは、データベースへの変更を永続化する時期かどうかを確認するのに適した場所です。

    this.dataGridView1.RowValidated += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_RowValidated);

    private void dataGridView1_RowValidated(object sender, DataGridViewCellEventArgs e)
    {
        MyLinq.Person person = dataGridView1.Rows[e.RowIndex].DataBoundItem as MyLinq.Person;

        if (person != null)
        {
            // save this person back to data access layer
        }
    }

編集後:

datagridインスタンスをサービスレイヤーに返しません。実行するロジックに応じて、サービスレイヤーのコレクションを渡すIEnumerable<MyLinq.Person>か、繰り返します。IList<MyLinq.Person>データアクセス層(データベース)への変更を永続化する

于 2009-10-26T16:46:03.847 に答える
1

DataContextオブジェクトの「save」メソッドはですSubmitChanges()

using (MyContext c = new MyContext())
{
     var q = (from p in c.People
             where p.Id == 1
             select p).First();
     q.FirstName = "Mark";
     c.SubmitChanges();
}

Michael Gが述べたように、変更を収集して、bllオブジェクトに戻す必要があります。

于 2009-10-26T18:17:14.067 に答える