【发布时间】:2011-11-12 02:29:48
【问题描述】:
我有一个包含多列的网格,用户可以根据任何列进行排序。绑定网格的数据是自定义实体的集合。我在屏幕上有一个打印按钮,单击此按钮我需要进行自定义打印。打印必须以与网格中显示的顺序相同的顺序显示数据(带有附加数据)
有没有办法直接获取排序后的数据源,而不是在排序事件中对数据源进行排序?
谢谢 潘卡伊
【问题讨论】:
我有一个包含多列的网格,用户可以根据任何列进行排序。绑定网格的数据是自定义实体的集合。我在屏幕上有一个打印按钮,单击此按钮我需要进行自定义打印。打印必须以与网格中显示的顺序相同的顺序显示数据(带有附加数据)
有没有办法直接获取排序后的数据源,而不是在排序事件中对数据源进行排序?
谢谢 潘卡伊
【问题讨论】:
您必须使用 yourDataGrid.Items,Items 反映了网格的当前视图。 并且您必须使用 Cast 方法进行转换,然后使用 .ToList();
想象一下
List<MyClass> myListOfMyClass = new List<MyClass>();
myGrid.ItemSource = myListOfMyClass;
List<MyClass> myListOfMyClassSortedByTheUser = myGrid.Items.Cast<MyClass>().ToList();
【讨论】:
是的,有。在 WPF 中,总是绑定 CollectionView,而不是集合本身。如果您自己不指定集合视图,则使用默认视图。您可以像这样访问此默认集合视图:
CollectionViewSource.GetDefaultView(yourCollectionOfCustomEntities);
这是应用了所有排序和过滤的网格显示的集合视图。
【讨论】:
您也可以只枚举 DataGrid 的 Items 属性。与 ItemsSource 属性不同,Items 属性似乎准确地反映了屏幕上的内容,包括排序和过滤。例如:
foreach (var item in dataGrid.Items)
{
// do something
}
【讨论】: