2012-03-22 26 views
2

我有一个非常简单的C#DataTable问题,我似乎无法包住我的头;它似乎如此海峡,但我必须失去一些东西。在C#中更新DataRow的问题

我希望有人可以给我,为什么我无法更新数据表中的单元格值如下所示解释:

代码:

DataTable t = new DataTable(); 
    t.Columns.Add("MyCol"); 
    t.Rows.Add("old value"); 
    t.Rows[0].ItemArray[0] = "new value"; 
    t.AcceptChanges(); 
    dataGridView1.DataSource = t;   //did not work. still reads "old value" 

任何帮助,将不胜感激!谢谢!

回答

5

简单的改变:

t.Rows[0].ItemArray[0] = "new value"; 

t.Rows[0][0] = "new value"; 

这就是它!

EDIT(由交代):

更改ItemArray元素是不被跟踪,所以没有变化反映在数据表中的值(原代码有问题)

但是你可以用ItemArray改变所有该行一次如下:

t.Rows[0].ItemArray = new object[] {"new value"}; 

在这种情况下,变更被跟踪,并且您会得到预期的结果。

+0

花花公子!!!!完全有效!非常感谢! 任何想法为什么行[] []工作,但行[]。ItemArray []不? – Chromex 2012-03-22 01:23:56

+0

看看编辑后的答案。 – JotaBe 2012-03-22 01:44:17

0

你试过以下吗?


... 
dataGridView1.DataSource = null; // set it to null before it set to a new one. 
dataGridView1.DataSource = t;

+0

感谢您的答复,JotaBe先生的回答结束了神秘的解决方案...... – Chromex 2012-03-22 01:28:04

1

要回答你的问题

你应该做这样的

t.Rows[0].ItemArray = new object[] { "new value" }; 
根据MSDN

您可以使用该属性通过 设置或获取该行的值阵列。如果您使用此属性来设置值,则该数组必须具有与列集合相同的大小和排序的 。在 ItemArray中传递null表示没有指定值。