1

私は C# のデータベース (C# 自体ではない) とデータ バインディングの概念全体を操作することに非常に慣れていないので、そのことを心に留めておいてください。これに影響する場合は、SQL Server CE も使用しています。

VS2010 で構築された厳密に型指定されたデータセットを使用して SQL Server CE データベースにアクセスし、それに WinForms コントロールをバインドしてデータを表示しようとしています。コントロールを正常にバインドでき、現在データベースにあるデータは問題なく表示されます。新しいデータをデータベースに挿入することもできます。アプリケーションを再起動すると、挿入されたデータがコントロールに表示されます (具体的には ComboBox ですが、今後さらに使用する予定です)。

問題は、アプリを再起動するまで新しい行がまったく表示されないことです。データ バインディングに関する私の理解では、コントロールは自動的に更新されるはずです。INotifyPropertyChanged について読んだことがありますが、ここで使用するのが正しいかどうかわかりません。正しい場合は、行の挿入にどのように使用すればよいですか?

私はこのようにコンボボックスをバインドしています:

DataSet.tagDataTable tagdata = new tagTableAdapter().GetData();
comboBox1.DataSource = tagdata;
comboBox1.DisplayMember = tagdata.tagnameColumn.ColumnName;
comboBox1.ValueMember = tagdata.tagIDColumn.ColumnName;

そして次のように挿入します:

Guid g = Guid.NewGuid();
new tagTableAdapter().Insert(g, Name)

Name は、テキスト ボックスから取得した単なる文字列です。

ありがとう。

編集:私が使用しているDBテーブルはtagと呼ばれ、tagIDとtagnameの2つの列があることに言及する必要があります。tagID は GUID、tagname は varchar です。

4

2 に答える 2

2

あなたがしているTableAdpater.Insertことはあなたのデータをあなたのデータベースに直接挿入することであり、あなたはあなたのアプリケーションの通知を回避しています。それを行う場合は、iefpwが言ったことを実行する必要があります。それは、データテーブルをリロードしてコントロールを再バインドすることでした。

別の方法は、データテーブルに行を追加することです。あなたはこのようなことを試すことができます:

// retrieve the datatable from the control
DataSet.tagDataTable tagdata = comboBox1.DataSource as DataSet.tagDataTable;
// create a new row and fill in the data
var dr = tagdata.NewRow();
dr["tagid"] = Guid.NewGuid();
dr["tagname"] = Name;
// actually add it to the table
tagdata.Rows.Add(dr);

この時点でDataTableに追加すると、コンボボックスは自動的に更新されますが、データベースに書き込まれていないため、データベースに保存する必要があります。

于 2012-04-08T23:42:01.927 に答える
0

最初に行ったように、データを再度バインドし、コントロールを再度更新する必要があります。データを表示するだけではありません。メカニックです。リアルタイムではありません。

于 2012-04-08T20:03:09.173 に答える