有没有一种方法可以通过编程方式对WPF DataGrid进行排序(例如,如果我单击了第一列)?
有没有办法模拟这种点击?
我的代码如下:
Collection_Evenements = new ObservableCollection<Evenement>();
Collection_Evenements = myEvenement.GetEvenementsForCliCode(App.obj_myClient.m_strCode);
Collection_Evenements.CollectionChanged += Collection_Evenements_CollectionChanged;
myDataGridEvenements.ItemsSource = Collection_Evenements;
System.Data.DataView dv = (System.Data.DataView)myDataGridEvenements.ItemsSource;
dv.Sort = "strEvtType";
myDataGridEvenements.Focus();
myDataGridEvenements.SelectedIndex = 0;
myDataGridEvenements.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
我不知道为什么,但是dv.Sort = "strEvtType";
行导致了一件奇怪的事情,我的窗口出现了,程序没有继续执行下一行,尽管如此,我没有看到排序!
7条答案
按热度按时间uurv41yg1#
voo的解决方案对我不起作用,
ItemsSource
是null,很可能是因为它不是直接设置的,而是绑定的。我在StackOverflow找到的所有其他解决方案都只处理Model的排序,但是DataGrid
头并没有反映到排序中。这里有一个基于不完整脚本的正确解决方案:http://dotnetgui.blogspot.co.uk/2011/02/how-to-properly-sort-on-wpf-datagrid.html
对于你的代码,可以这样使用:
或者使用默认参数值,只需:
w9apscun2#
获取ItemsSource的DataView并使用其Sort属性指定排序依据的列:
8fq7wneg3#
DataGrid的PerformSort方法是在列标题单击时实际执行的。但这种方法是内部的。因此,如果你真的想模拟点击,你需要使用反射:
nue99wik4#
快速&简单的方法:
oxiaedzo5#
这个方法对我很有效:
eiee3dmh6#
你可以使用ICollectionView来过滤,排序和分组你的数据网格中的项目。
编辑:添加排序,没有仔细阅读问题:)
6qqygrtg7#
要像单击第一列那样对DataGrid进行排序,必须使用从WPF创建的DataView。在本例中,DataGrid在每次自动生成列时进行排序,但您可以选择其他事件,如DataGrid1_Loaded