У меня есть результат запроса LINQ с GroupBy, который я привязал к DataGridView. Что мне нужно реализовать, что изменения в базовом списке IEnumerable List заставят DataGridView обновиться?Обновить Связанный Linq Результат datagridview
Легкий способ, который я нашел, - это просто повторить запрос и повторно привязать его к datagridview всякий раз, когда что-то изменится. Это работает, хотя с некоторыми побочными эффектами (выбранные пользователем элементы не выбраны - свитки списка вверх). Думаю, это потому, что DataGridView фактически представляет собой полный новый список, связанный с ним, а не только одну обновленную запись. Есть ли способ повысить эффективность обновления?
Возможно, Linq - это неправильный способ сделать это эффективно. Я также открыт для других решений, если мне не нужно писать 10 классов для его выполнения.
private void BindObjectsToDataGridView()
{
IEnumerable<Telegram> myTelegrams = Source.GetTelegrams();
myDataGridView.DataSource = myTelegrams.GroupBy(g => g.ID)
.Select(s => new { ID = s.ID, Count = s.Count() })
.ToList();
}
private void Source_TelegramsChanged(object sender, EventArgs e)
{
// Just rebinding the Linq updates just fine
// but it causes user-side issues in the datagrid view.
// And it feels wrong to completely rebuild the list when
// only one telegram has been changed/added/removed...
BindObjectsToDataGridView();
}
Почему вы не помните выбранный индекс строки, обновляете сетку и задаете выбранную строку? Это будет работать только для обновления, но вместо этого вы можете получить идентификатор выбранной строки, а затем использовать LINQ для повторения строк, чтобы найти этот идентификатор и установить его для выбора? Используйте выбранное событие rowviews gridview и поймайте уникальное значение строки. –
@Onam Это чистое поведение для реализации, если нет лучшего решения, чем просто пересоединение всего, но это не изменило бы тот факт, что мне пришлось бы каждый раз переписывать полный список. – Marwie
Проблема заключается в том, что вам нужно переустановить, если у вас нет умного механизма для мониторинга того, что было удалено, изменено, добавлено, а затем обновлено только некоторые части сетки. Это приведет к таким осложнениям, как, например, если пользователь отфильтровал результаты или отсортировал сетку определенным образом. –