1

.NET データ プロバイダー ライブラリを使用してデータベースから取り込まれた、それにバインドされた がDataGridViewあります。DataTablePostgreSQLNpgsql

レコードの入力は機能しますが、単一のレコードだけを既存の に追加したい場合DataTable、以前のレコードは消えます:

NpgsqlDataAdapter npDataAdapterSingle = new NpgsqlDataAdapter("SELECT * from \"Weight\" ORDER BY id DESC LIMIT 1", this.npConnection);
DataTable tmpTable = new DataTable("tmpTable");
npDataAdapterSingle.Fill(tmpTable);

DSWeight.WeightRow row = this.dSWeight.Weight.NewWeightRow();
row.ItemArray = tmpTable.Rows[0].ItemArray;
this.dSWeight.Weight.Rows.InsertAt(row, 0); //Prepend, but i also tried this.dsWeight.Weight.Rows.Add(row);

LIMIT'ingせずにすべてのレコードを選択すると、期待どおりに機能します。しかし、私は考えました - すでにそれらのレコードを持っているのに、なぜデータベースをもう一度クエリする必要があるのでしょうか? だからこそ、したいLIMIT

新しいレコードを手動でデータベースに追加し、クエリを実行してデータテーブルに追加するため、別の解決策があるかもしれません。新しいレコードをデータテーブルに追加し、それらをデータベースに追加するという本来の方法ではありません。データベースで id フィールドとタイムスタンプ フィールドを管理し、datagridview でこれらのフィールドにデータを入力する必要があるため、このようにします。

私は何が欠けていますか?

4

1 に答える 1

0

DSWeight.WeightRow のデータ型と 'this' オブジェクトの範囲についてはわかりません。メソッド全体ではなく、コードの一部しか見えないからです。これはおそらくあなたのために働くはずです。試してみてください。

NpgsqlDataAdapter npDataAdapterSingle = new NpgsqlDataAdapter("SELECT * from \"Weight\" ORDER BY id DESC LIMIT 1", this.npConnection);
DataTable tmpTable = new DataTable("tmpTable");
npDataAdapterSingle.Fill(tmpTable);

row =  tmpTable.NewRow();

foreach (DataColumn col in tmpTable.Columns)
   row[col.ColumnName] = tmpTable.Rows[0][col.ColumnName];

tmpTable.Rows.Add(row, 0);
于 2012-09-03T07:42:02.870 に答える