如何更新DataGrid中的数据

时间:2012-06-05 10:01:58

标签: c# windows-mobile compact-framework

我正在尝试更新我的DataGrid,但遗憾的是无法进行!我的应用程序有一个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();

但网格没有更新。我错过了什么?

2 个答案:

答案 0 :(得分:1)

我从来没有像UpdateAcceptChanges这样的工具以我想要的方式工作。我怀疑他们做的事与我看来显而易见的不同。

另外,我不知道是否链接了一个单独的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;
}

另一种技术是直接使用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));

答案 1 :(得分: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);  
相关问题