2009-11-03 80 views
16

我遇到了一些問題,我使用DataTable將數據存儲在dataGridView中。 數據被inputed這樣的:C#如何更改DataTable中的數據?

dt = new DataTable(); 
dt.Columns.Add("ID", typeof(int)); 
dt.Columns.Add("par", typeof(string)); 
dt.Columns.Add("max", typeof(int)); 
dt.Columns.Add("now", typeof(int)); 

dt.Rows.Add(new object[] { id++,i + " " + j++, strarr[0], strarr[1] }); // ... etc etc 

dataGridView1.DataSource = dt; 

現在我想要做一些改變,我用代碼:

dt.Rows[1].ItemArray[3] = "VALUE"; 

當我調試,ItemArray代表我要行,所以它的好,但我仍然無法做任何改變,最新的錯誤?如何更新DataTable?我在谷歌上搜索並沒有什麼:(

回答

14

dt.Rows[1].ItemArray給你項目陣列的副本當你修改它,你沒有修改原始

你可以簡單地這樣做:。

dt.Rows[1][3] = "Value"; 
當您要修改所有行值

ItemArray屬性使用。

例:

dt.Rows[1].ItemArray = newItemArray; 
38

嘗試SetField方法:

table.Rows[i].SetField(column, value);
table.Rows[i].SetField(columnIndex, value);
table.Rows[i].SetField(columnName, value);

這應該完成這項工作,是有點 「乾淨」 比使用行[i] [j]。

+0

+1 - 我同意,你的建議比使用數組的例子要乾淨得多。您的示例允許按名稱清楚地標識字段,而不是按陣列中字段的位置。我認爲數組的使用很便宜而且很懶惰。這在未來的維護中肯定會增加錯誤的風險。另外,如果數據表對象是從數據庫結構派生的,並且如果該數據庫結構要更改(例如在表定義的中間插入一列),則使用數組方法可能會產生運行時錯誤或更糟 - 未檢測到損壞的數據。 – barrypicker 2014-10-31 17:11:54

7

您應該先設置屬性dt.Columns["columnName"].ReadOnly = false;

+2

應該是dt.columns [n] .ReadOnly – 2013-09-18 19:32:38