0

フィルター可能な列を持つ RadGridView があります。特定のフィルター (使用されている場合) の結果であるすべての行をチェックする列ヘッダーにチェックボックスを追加する必要があります。

ヘッダー列の CheckBox がチェックされている場合、ユーザーが特定の列に適用できるフィルターがあるため、Binded コレクションの値を更新できません。

だから、私は次のことを試しました:

var rows = EntityDataGridView.ChildrenOfType<GridViewRow>();

次に、行をループして、そのデータ コンテキストを更新します。このソリューションは正常に機能しますが、行の仮想化がオンになっているとうまく機能しません。画面上の表示可能な行のみを更新します。大量のデータを処理する必要があるため、行の仮想化をオフにすることはできません。

私は解決策を念頭に置いていますが、これを投稿して、これを迅速かつより良い方法で解決する方法についてさらにアイデアを得ることができます.

私が持っている解決策は、RadGridView のフィルター記述子であるビュー モデルに渡し、ビュー モデルのコレクションにフィルターを手動で適用してから、チェックボックスの状態を更新することです。しかし、これを処理するより良い方法はありますか?

4

2 に答える 2

0

LOL、この問題の解決策は非常に簡単であることが判明しました。RadGridView の「Items」プロパティには、データ ソースからのアイテムではなく、フィルター処理されたアイテムがあります。だから、代わりにそれを使った!

于 2013-03-28T22:38:47.137 に答える
0

テレリックがフィルターを実装する方法がわかりません。

ただし、radgrid が ICollctionView使用してコレクションをフィルター処理する場合、コレクションをICollctionViewとして作成し、フィルター処理されたアイテムのコレクションを反復処理できます。

var myCollectionView = CollectionViewSource.GetDefaultView(myDataSource);

...

foreach(var item in myCollectionView.OfType<TypeOfTheElement>())
{
    item.IsChecked = value;
}

これは、 のICollcetionViewが telerik radgridViewModel使用されているものと同じ場合にのみ機能することに注意してください。

于 2013-03-28T04:37:21.440 に答える