0

これは私を最も近い壁に追いやっています。List<MyClass>複数のエントリ (MyList と呼びましょう) を持つオブジェクトがあり、DataGridViewコントロールがあります。コントロールの DataSource プロパティを MyList に設定できます。MyList のすべての要素を取得し、MyClass オブジェクトのメンバーごとに個別の列を使用しています。メンバーのいずれかを変更すると、デバッガーを使用して MyList を調べ、変更された値を確認できます。

しかし、MyList に 10,000 個のエントリがあり、そのうちの 10 個だけを見たいとします。LINQ to Objects を使用して、次のようにリストをフィルター処理できます。

query = from myObect 
in MyList 
where SomeField == SomeGoodValue select new {myObject.SomeMember};
MyDataGridView.DataSource = query.ToList();

これにより、必要なデータが表示されます (この場合、各オブジェクトの 1 つのメンバーが選択されます) が、データを編集することはできなくなります。

フィルタリングされたリストを に取得しDataGridView、ビュー コントロールを編集可能にする方法はありますか? ブロックによって生成された匿名型を使用すると、newこれが不可能になることがわかっています。あれは正しいですか?

4

1 に答える 1

0

100% 確実ではありませんが、セルを編集可能にしたい場合は、ソースをグリッドからバインド解除し、後で再バインドできると思います。理想的ではありませんが、グリッド ビューの読み込み時にソースのバインドを解除し、保存する前に再バインドします。

Dim myCurrencyManager As CurrencyManager = DirectCast(BindingContext(DataGridView1.DataSource), CurrencyManager)

myCurrencyManager.SuspendBinding()

myCurrencyManager.ResumeBinding()
于 2013-04-24T18:48:28.253 に答える