Вам необходимо обновить привязки источника данных, потому что вы изменяете непосредственно ограниченный экземпляр, а не ячейку.
Попробуйте это:
foreach ( DataGridViewRow x in dataGridView1.Rows )
{
if ( x.DataBoundItem != null)
((Foo)x.DataBoundItem ).C = "CCC";
}
dataGridView1.DataSource = new BindingList<Foo>(ds);
В противном случае вы можете написать вместо:
x.Cells[2].Value = "CCC";
Таким образом, сетка обновляется, а также ограниченный экземпляр.
Вам не нужен BindingList, и вы можете написать это, в первый раз и после модификации:
dataGridView1.DataSource = null;
dataGridView1.DataSource = ds;
Это лучший шаблон:
Как я могу обновить c # dataGridView после обновления?
Но мы можем использовать DataTable или лучше DataSetналичие DataTable при использовании дизайнеров Visual Studio и использование перетаскивания таблицы на формах для написания меньшего количества кода и автоматического создания сетки данных и всех невизуальных компонентов данных.
Вот сводная информация
Чтобы обновить представление модифицированного DataBoundItem
, который является объектом источника данных, который является BindingList
или просто List
, мы можем переназначить источник данных.
Но если это BindingSource
, вы можете использовать ResetBindings
на BindingSurce
.
Но если вы используете DataTable
вместо источника данных в списке, то вы можете использовать EndEdit
в DataBoundItem, который является DataRowView.
Тогда возникает вопрос: что лучше делать здесь: использовать BindingSource в List или создать DataTable и управлять LoadFromStream и SaveFromStream, поскольку вы сказали, что данные поступают из потока IEnumerable <>?
Поэтому вы можете видеть CopyToDataTable()
для сопоставления вашего List<Foo>
с DataTable
:
Создание таблицы данных из запроса (LINQ to DataSet)