0

我有一个带有可过滤列的 RadGridView。我需要在列标题中添加一个复选框,以检查作为某些过滤器结果的所有行(如果使用)。

当检查标头列上的复选框时,我只是无法更新贝琳集合中的值,因为用户可能会适用于某些列。

所以,我尝试了以下方法:

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

然后我遍历行并更新其数据上下文。此解决方案运行良好,但在启用行虚拟化的情况下效果不佳。它只更新屏幕上的可见行。我们必须处理大量数据,因此我们无法关闭行虚拟化。

我有一个解决方案,但我发布这个是为了获得更多关于如何以更快更好的方式解决这个问题的想法。

我有它的解决方案,我将 RadGridView 的过滤器描述符传递给视图模型,然后手动将过滤器应用于视图模型中的集合,然后更新复选框状态。但是有没有更好的方法来处理这个问题?

4

2 回答 2

0

我不知道 Telerik 是如何实现过滤器的。

但是,如果它的radgrid使用ICollctionView过滤集合,您可以将您的集合创建为ICollctionView,并遍历过滤的项目集合。

var myCollectionView = CollectionViewSource.GetDefaultView(myDataSource);

...

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

请注意,只有当ICollcetionView中的 ICollcetionViewViewModel与 telerik radgrid使用的相同时,这才有效。

于 2013-03-28T04:37:21.440 回答
0

大声笑,这个问题的解决方案非常简单,RadGridView 上的“项目”属性具有过滤的项目,而不是来自数据源的项目。所以,我改用那个!

于 2013-03-28T22:38:47.137 回答