2012-06-05 57 views
0

我正在嘗試更新我的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; 

當用戶按下一個「Load」按鈕,我的數據加載到我的網格:

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(); 

但沒有更新到電網..我錯過了什麼?

回答

1

對於面臨着同樣的問題,開發人員,這裏是我的固定mine:

您可以使用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); 
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)); 
+0

感謝您的指點..我用稍微不同的方式解決了問題。 –

+0

呃......我的時間甚至沒有+1。 – jp2code

+1

你去... :) –