我有一个使用 GroupBy 的 LINQ 查询的结果,我已绑定到 DataGridView。我必须实现什么,底层 IEnumerable List 中的更改将导致 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();
}