编辑:我注意到这种情况发生在我绑定到词典时,这是我在原帖中遗漏的内容;我已经更新了帖子。
如果我将BindingSource的数据源设置为从Dictionary中提取的后期评估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()解决这个问题,但后来我失去了懒惰的评估。
非常感谢
答案 0 :(得分:0)
有趣的行为。我没有独立验证它,但这是一个想法 - 如果你不介意在空集合的情况下看到一个空行,那么使用.DefaultIfEmpty()
呢?