如何通过XceedDataGridWrapper获取DataGrid当前可见数据?
获取Xceed DataGrid筛选后显示项的简便方法
嘿,刚好我对Xceed的DataGrid控件有不少实践经验,你想要的这种获取用户筛选后仅显示的项的需求,其实有非常直接的解决方案,完全可以实现类似你期望的GridWrapper.CurrentItems的用法!
核心思路:利用Xceed DataGrid内置的视图集合
Xceed的DataGridControl本身就维护了经过筛选、排序、分组后的显示项集合,关键是要从你的XceedDataGridWrapper里拿到这个集合。具体分两种情况:
1. 如果你的Wrapper已经暴露了内部的DataGridControl实例
假设你的XceedDataGridWrapper有一个类似InnerGrid的属性,指向封装的DataGridControl,那直接通过它的View.Items就能拿到当前显示的所有项:
// 替换YourDataType为你实际的实体类型 var visibleItems = GridWrapper.InnerGrid.View.OfType<YourDataType>().ToList();
View.Items返回的就是用户操作筛选后最终显示在网格里的项,完全符合你的需求。
2. 如果Wrapper没有暴露内部控件,给它添加一个CurrentItems属性
如果你的XceedDataGridWrapper是自定义封装的,没有对外暴露内部的DataGridControl,那可以直接在Wrapper类里添加一个CurrentItems属性,把底层的显示项暴露出来:
public class XceedDataGridWrapper { // 假设_innerGrid是Wrapper内部维护的DataGridControl实例 private DataGridControl _innerGrid; // 添加你想要的CurrentItems属性 public IEnumerable<object> CurrentItems { get { // 返回筛选后的显示项,如需强类型可自行转换 return _innerGrid.View.Items.Cast<object>(); } } // 其他Wrapper逻辑... }
这样你就可以像最开始期望的那样直接调用:
var dataContext = GridWrapper.CurrentItems;
额外说明
View.Items会自动同步用户的筛选、排序、分组操作,每次用户修改筛选条件后,这个集合都会实时更新为当前显示的项。- 如果需要强类型集合,记得用
OfType<YourModel>()代替Cast<object>(),避免类型转换异常。
内容的提问来源于stack exchange,提问作者AidanH
相关产品推荐
相关产品推荐

