У меня есть приложение WinForm с несколькими DataGridView, привязанными к спискам SortableBindingLists.
При некоторых обстоятельствах мне нужно программно удалить элемент из списка, к которому привязана сетка.
Я не могу заставить DGV распознать, что его данные изменились или, в частности, что в нем меньше строк. Я вызываю dataGridView1.Invalidate (), и он перерисовывает сетку, но пытается перерисовать столько строк, сколько было раньше, и выдает серию исключений «Индекс не существует», одно исключение для каждого столбца. 1005 *
Вот упрощенный пример кода, который демонстрирует проблему: (просто WinForm с DGV и кнопкой.)
private List<Employee> list;
private void Form1_Load(object sender, EventArgs e)
{
list = new List<Employee>();
for (int ix = 0; ix < 3; ix++)
{
list.Add(ObjectMother.GetEmployee(ix+1));
}
dataGridView1.DataSource = list;
}
private void cmdDeleteARow_Click(object sender, EventArgs e)
{
list.Remove(list[0]);
dataGridView1.Invalidate();
}
В ASP.NET при использовании элемента управления GridView есть метод «DataBind ()», который можно вызвать, чтобы заставить его обновить свои данные. Кажется, в WinForms такого нет, или я что-то упустил?