当前位置: 代码迷 >> C# >> WPF 排序DataGrid数据源解决方法
  详细解决方案

WPF 排序DataGrid数据源解决方法

热度:234   发布时间:2016-05-05 02:56:18.0
WPF 排序DataGrid数据源
用的MVVM框架
XML里面DataGrid的部分定义如下:DataGrid绑定数据源GoodsSummaryList
 <DataGrid  FontSize="12"  Name="goodsList"   ItemsSource="{Binding GoodsSummaryList}" ......>
                <DataGrid.Columns>
                    <DataGridTextColumn Header="商品类别"   Binding="{Binding class_big}"  />
                    <DataGridTextColumn Header="商品编号"   Binding="{Binding goods_sn}"  />
</DataGrid.Columns>
</DataGrid>


获取数据的方法我直接写到了xml.cs里,获取到数据后,按下paixu按钮,对数据进行排序
 public partial class Summary : Window
    {
        SummaryViewModel sum = null;
        public Summary()
        {
            InitializeComponent();
            sum = new SummaryViewModel();
            this.DataContext = sum;
        }
//......此处省略

 private void paixu_Click(object sender, RoutedEventArgs e)
        {
            ICollectionView view = CollectionViewSource.GetDefaultView(sum.GoodsSummaryList);
            view.SortDescriptions.Add(new SortDescription("class_big", ListSortDirection.Ascending));
            view.SortDescriptions.Add(new SortDescription("goods_name", ListSortDirection.Ascending));
        }
//......此处省略
}


按下按钮之后,界面上确实是按照我的要求,先品类再名称排序了,但是sum.GoodsSummaryList中的数据却还是原来的排列顺序。而我之后打印的数据来源就来自sum.GoodsSummaryList
附上ViewModel的GoodsSummaryList的定义:
private ObservableCollection<goods> goodsSummaryList;
public ObservableCollection<goods> GoodsSummaryList
{
 get { return goodsSummaryList; }
 set
{
 goodsSummaryList = value;
this.RaisePropertyChanged("GoodsSummaryList");
}
}


求助了百度才知道,ICollectionView  view对象的排序,过滤及分组.这些功能和数据对象本身是相互独立的,然后我就不知道要怎么更新GoodsSummaryList的排列顺序了。请各位大神指导下,这个问题纠结好久了。
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

没人来吗?顶一顶,更健康

https://msdn.microsoft.com/zh-cn/library/ff407126(v=vs.110).aspx

谢大神帮忙!ICollectionView 它排列的应该只是视图上的数据吧?我需要排列的是数据源,即一楼中提到的viewmodel中GoodsSummaryList中的数据。

在paixu_Click  中直接对数据源排序就行了。使用OrderBy函数等

谢大神!我想实现按照两个条件,先class_big再goods_name的条件排序,不知道要怎么写,只会写按照一种的sum.GoodsSummaryList = new ObservableCollection<ecs_order_goods>(sum.GoodsSummaryList .OrderBy(o => o.class_big));


学学linq 吧。
OrderBy(o => o.class_big)
-》
OrderBy(o => new { 
o.class_big,
o.goods_nam
})



  相关解决方案