Проблема с обновлением DataRow в C # - PullRequest
3 голосов
/ 22 марта 2012

У меня очень простая проблема в 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 ]

5 голосов
/ 22 марта 2012

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

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

до

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

Вот и все!

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

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

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

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

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

1 голос
/ 22 марта 2012

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

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

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

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

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

0 голосов
/ 22 марта 2012

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


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