Проблема с обновлением 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;