2011-01-11 14 views
1

BindingListを使用して、Windows FormsアプリケーションのDataGridViewにPersonオブジェクトのリストを表示しています。 DataGridViewを変更すると、基になるBindingListが変更されます。私はこの部分が働いている。C#:DataGridViewからBindingListへの変更をデータベースにプッシュする

ここで、リストをデータベーステーブルに保存します。データベースからリストを読み込んでPersonリストに入力するのは簡単ですが、DataGridViewから人を追加/編集/削除した場合、どのようにいつ変更をデータベースに保存し直しますか?

(第二に、私は抽象化されたオブジェクト指向の方法で、私のコードで動作するようにしたいので、データテーブルを使用したくないですか?このアプローチは大丈夫ですか私はいくつかの大きな絵をしないのです。)簡単にするために

答えて

1

Windowsフォームのオブジェクトの永続性は、最初にLINQ2SQLを使用することができます。また、データベースからオブジェクトを収集するときにオブジェクトを具体化します。

たとえば、サポートされているデータベース(SQL Server(Express))のデータベーススキーマからlinqコンテキストを作成した後、フォームにインスタンスを作成し、データ読み取り、編集、書き込み、キャンセルすることができます。

private YourAppContext context; 

    private void RenewContext() 
    { 
    context = new YourAppContext(); 
    } 

    private void LoadData() 
    { 
    RenewContext(); 
    DataGridView1.DataSource = context.Articles.OrderByDescending(x => x.DatePosted).Take(10); 
    } 

    private void AcceptButtonPressed() 
    { 
    context.SubmitChanges(); 
    } 

    private void CancelButtonPressed() 
    { 
    LoadData(); 
    } 

明らかに、BindingSourceを通じてデータを渡すことができます。

+0

面白い私はASP.NETでLinq2Sqlを使用しましたが、ここでは完全に私を逃しました。それを指摘してくれてありがとう!これはlinq2sqlを使わずにやってみる方法はまだ分かっていますが、私が行くことに決めた方法かもしれません。 – User

+0

次に、自分のオブジェクトにINotifyPropertyChangedを実装し、変更されたプロパティを追跡し(新しいオブジェクトや削除されたオブジェクトのリストを維持する)、データ収集のロジックを逆にして、INSERT、UPDATE、DELETEステートメントを変更。これらの作業の中には、リフレクションと帰属を使用するものがありますので、自分でクエリーを作成せずにオブジェクトを保存することはできますが、自動的にクエリーを生成することができます。しかし、なぜあなたは車輪を再実装したいですか? – too

+0

良い点。私が発見した実用的な理由は、Visual Studio 2010 Expressを使用しているので、Linq to SQLデザイナーがSQL Serverデータベースに対してサポートされているとは思わないということです。 – User

関連する問題