2012-03-22 2 views
2

У меня очень простая проблема с C# DataTable, с которой я не могу окутать голову; он кажется таким прочным, но я должен что-то упустить.Проблема с обновлением DataRow в C#

Я надеялся, что кто-то может объяснить мне, почему я не могу обновить значение ячейки в DataTable, как показано ниже:

Код:

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 элементы не отслеживаются, так что никаких изменений не отражаются в DataTable значений (код в исходный вопрос)

Однако вы можете использовать ItemArray изменить все в строке сразу, например:

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

В этом случае изменения отслеживаются, и вы получаете ожидаемый результат.

+0

чувак !!!! это полностью работает! большое спасибо! Любая идея, почему строки [] [] работает, но строки []. ItemArray [] не работает? – Chromex

+0

Посмотрите на отредактированный ответ. – JotaBe

0

Вы пробовали следующее?


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

+0

благодарит за ответ, ответ г-на ДжотаБе оказался загадочным решением ... – Chromex

1

Чтобы ответить вам вопрос

вы должны сделать, как этот

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

по MSDN,

Вы можете использовать это свойство, чтобы установить или получить значения для этой строки через массив. Если вы используете это свойство для установки значений, массив должен иметь размер того же размера и заказать его как коллекцию столбцов. Передача null в ItemArray указывает, что значение не указано.

Смежные вопросы