我正在尝试更新我的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();
但网格没有更新。我错过了什么?
答案 0 :(得分: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;
}
另一种技术是直接使用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);