【问题标题】:Binding a DataGridView to a lazy LINQ query on a Dictionary将 DataGridView 绑定到字典上的惰性 LINQ 查询
【发布时间】:2011-09-10 19:55:43
【问题描述】:

编辑:我注意到当我绑定到字典时会发生这种情况,这是我在原始帖子中遗漏的内容;我已经更新了帖子。

如果我将 BindingSource 的数据源设置为从字典中提取的后期评估 LINQ 查询,它似乎可以正常工作,除了一件事:当结果为空时。当查询不返回任何内容时,DataGridView 最终会绑定到空的 KeyCollection 或 ValueCollection 本身,就好像它是一个数据项一样。这会导致 DataGridView 中出现一个空白行。

似乎 BindingSource 旨在识别空 List 是具有零项的数据源,但不识别空的 KeyCollection 或 ValueCollection 是具有零项的数据源,而是认为它是具有一项的数据源(空集合)。

这是否与 Dictionary 实现(或不实现)的接口有关?

例如:

...
private readonly Dictionary<Record> mRecords = new Dictionary<Record>();
...

private IEnumerable<Record> GetDataSource()
{
   return mRecords.Values.OrderBy(x => x.Amount);
}

...
mBindingSource.DataSource = GetDataSource();
...

我当然可以通过使用 ToList() 来解决这个问题,但是我失去了惰性求值。

非常感谢

【问题讨论】:

    标签: c# linq .net-4.0 datagridview bindingsource


    【解决方案1】:

    有趣的行为。我还没有独立验证它,但这里有一个想法——如果你不介意在空集合的情况下看到一个空白行,那么使用.DefaultIfEmpty() 怎么样?

    【讨论】:

    • 这类似于使用 ToList() ,您不再使用惰性求值。数据源将设置为 null,我需要再次调用该方法以获取稍后显示的任何结果。
    猜你喜欢
    • 2011-01-24
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    相关资源
    最近更新 更多