0

DataGrid を更新しようとしていますが、残念ながらできません! 私のアプリケーションには、データが CSV ファイルから読み込まれる DataGrid があります。一部のデータは更新する必要があります。しかし、更新をグリッドに反映する正しい方法を見つけることができません。

これが私がこれまでに持っているものです:

// Creation of my DataGrid
this.dataSource = new DataSet();
DataTable data = new DataTable("Products");    


data.Columns.Add("Note", System.Type.GetType("System.String"));
data.Columns.Add("Details", System.Type.GetType("System.String"));
data.Columns.Add("Net", System.Type.GetType("System.String"));
data.Columns.Add("Empty Weight", System.Type.GetType("System.String"));
data.Columns.Add("Full Weight", System.Type.GetType("System.String"));
data.Columns.Add("Description", System.Type.GetType("System.String"));
data.Columns.Add("UOM", System.Type.GetType("System.String"));
data.Columns.Add("Item", System.Type.GetType("System.String"));

dataSource.Tables.Add(data);
dataGrid1.DataSource = data;

ユーザーが「読み込み」ボタンを押すと、データがグリッドに読み込まれます。

DataTable vehicle = dataSource.Tables[0];
.
. // data is read from CSV
.
vehicle.Rows.Add("A sample note", "...", full - empty, empty, full, "Test description", "Gr", i); // an example

グリッド上のデータを更新しようとした方法は次のとおりです。

DataTable vehicle = dataSource.Tables[0];
vehicle.Rows[0].BeginEdit();
vehicle.Rows[0].ItemArray[0] = "TEST COMPLETE";            
vehicle.Rows[0].EndEdit();
vehicle.AcceptChanges();
dataGrid1.Update();

しかし、グリッドへの更新はありません..何が欠けていますか?

4

2 に答える 2

1

同じ問題に直面している開発者のために、これが私が私の修正した方法です:

SetFieldメソッドを使用して、グリッドの行のデータを更新できます。変数currentRowで変更する行インデックスがあると仮定すると、データを変更する方法は次のとおりです。

DataTable vehicle = dataSource.Tables[0];
vehicle.Rows[this.currentRow].SetField(4, "Updating the 5th column in the grid");
vehicle.Rows[this.currentRow].SetField(2, "Updating the 3rd column in the grid");

グリッドから行を削除する必要がある場合は、次のRemoveAt方法を利用できます。

dataGridTable.Rows.RemoveAt(rowIndexToDelete);  
于 2012-06-11T07:54:22.277 に答える
1

Update好きなように、または自分が望むように機能するツールを手に入れたことはありませんAcceptChanges。彼らは私には明らかなこととは違うことをしていると思います。

また、別の DataTable がリンクされているかどうかもわかりません (つまり、基になるポインターを介して)。DataTable に変更を加えることは、DataGridView に格納されているデータの変更に変換される場合と変換されない場合があります。

私の場合、再割り当てします。

private void UpdateTheDataGrid() {
  DataTable vehicle = (DataTable)dataGrid1.DataSource;
  // vehicle.Rows[0].BeginEdit(); <- Unsure if this is even needed
  vehicle.Rows[0].ItemArray[0] = "TEST COMPLETE";            
  // vehicle.Rows[0].EndEdit();
  vehicle.AcceptChanges();
  dataGrid1.DataSource = vehicle;
}

もう 1 つの手法は、DataGridView コントロール自体を直接操作することです。

private void UpdateTheDataGrid() {
  dataGrid1.Rows[0].Cells[0].Value = "TEST COMPLETE";
}

上記の注: 私は VS を実行していないため、そのコードが 100% 正確かどうかはわかりませんが、アイデアが得られるはずです。

コメントとして、列を追加するバージョンと私が使用するバージョンに違いがあるかどうか知りたいです。

// Yours
data.Columns.Add("Note", System.Type.GetType("System.String"));

// Mine
data.Columns.Add("Note", typeof(string));
于 2012-06-06T12:13:59.273 に答える