Проблема с обновлением DataRow в C#

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

Я надеялся, что кто-то сможет объяснить мне, почему я не могу обновить значение ячейки в 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"

Любая помощь будет оценена! Спасибо!

3 ответа

Решение

Просто измените:

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

в

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

Это оно!

РЕДАКТИРОВАТЬ (Добавлено пояснение):

Изменения в элементах ItemArray не отслеживаются, поэтому никакие изменения не отражаются в значениях данных (код в исходном вопросе)

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

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

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

Ответить на ваш вопрос

ты должен делать так

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

в соответствии с MSDN,

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

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


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

Другие вопросы по тегам