private void SortData(PrintOrderPageViewModel p, DataGrid dg, DataGridColumn col) { if (dg == null) { MessageBox.Show("事件源不是DataGrid无法排序"); return; } string sortPath = col.SortMemberPath; if (p.OrderViewModels.Count < 1) { return; } var sortType = col.SortDirection == null ? ListSortDirection.Ascending : (col.SortDirection == ListSortDirection.Ascending ? ListSortDirection.Descending : ListSortDirection.Ascending); List <PrintOrderViewModel> newVms = null; if (sortPath.Contains("DoorNumber")) { //两次排序,第一次根据门牌号排,然后根据货号排序,然后根据付款时间 类型PrintOrderViewModel实际了比较接口 List <PrintOrderViewModel> tmpList = p.OrderViewModels.ToList(); tmpList.Sort(); tmpList.Sort(); tmpList.Sort(); newVms = tmpList; } else { EnumerableKeySelector selector = new EnumerableKeySelector(p.OrderViewModels[0].GetType(), sortPath); if (sortType == ListSortDirection.Ascending) { newVms = p.OrderViewModels.OrderBy(obj => selector.GetData(obj)).ToList(); } else { newVms = p.OrderViewModels.OrderByDescending(obj => selector.GetData(obj)).ToList(); } } p.OrderViewModels.Clear(); for (int i = 0; i < newVms.Count; i++) { newVms[i].DefaultBackground = newVms[i].Background = (i % 2 == 0) ? PrintOrderViewModel.DEFAULTBACKGROUND_LIGHTGREEN : PrintOrderViewModel.DEFAULTBACKGROUND_LIGHTPINK; p.OrderViewModels.Add(newVms[i]); } col.SortDirection = sortType; }
private void GenTab(Order[] orders) { PrintOrderViewModel[] vms = new PrintOrderViewModel[orders.Length]; for (int i = 0; i < orders.Length; i++) { var vm = new PrintOrderViewModel(orders[i], (i % 2 == 0) ? PrintOrderViewModel.DEFAULTBACKGROUND_LIGHTGREEN : PrintOrderViewModel.DEFAULTBACKGROUND_LIGHTPINK); vms[i] = vm; } this.tbTotalCount.Text = "当前订单总数: " + orders.Length; CheckOrder(vms); var groups = vms.GroupBy(obj => obj.DeliveryCompany).ToArray(); this.printOrderPages.Clear(); foreach (var g in groups) { var p = new PrintOrderPageViewModel(g.ToArray(), this.cbbShippers.Text.Trim()); this.printOrderPages.Add(p); p.LoadBarValue(); } }