2011-09-10 6 views
1

EDIT:これは、私がオリジナルの投稿で見逃していた辞書にバインドするときに特に発生することに気付いています。私は投稿を更新しました。DataGridViewを辞書のLazy LINQクエリにバインドする

BindingSourceのデータソースをディクショナリから取得する最新のLINQクエリに設定した場合、結果が空の場合を除いて正常に動作しているようです。クエリで何も返されない場合、DataGridViewは、あたかもデータ項目であるかのように、空のKeyCollectionまたはValueCollection自体にバインドされてしまいます。これにより、空の行がDataGridViewに表示されます。

BindingSourceは、空のListがアイテムのないデータソースであることを認識するように構築されていますが、空のKeyCollectionまたはValueCollectionはアイテムがゼロのデータソースであると認識せず、 (空のコレクション)。

ディクショナリに実装されている(または実装していない)インターフェイスと関連がありますか?

例:

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

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

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

私はもちろんToListメソッド()を使用することによってこの問題を回避することができますが、その後、私は遅延評価を失います。

ありがとうございました。

答えて

0

面白い動作。私はそれを独自に検証していませんが、ここには考えがあります - もしあなたが空のコレクションの場合に空の行を見て気にしないなら、.DefaultIfEmpty()を使うのはどうですか?

+0

これは、もはやレイジー評価を使用していないToList()の使用に似ています。データソースはnullに設定され、後で結果が表示されるようにメソッドを再度呼び出す必要があります。 –

関連する問題