基本思路是排序前删除合计行,排序后吧删除的添加上去 int flag = 0; void dataGrid1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { var list = GetDataSource(); list.RemoveAt(list.Count - 1); IOrderedEnumerable<Friend> fList = null; if (flag == 0) { fList = list.OrderBy(i => i.sex); flag = 1; } else { fList = list.OrderByDescending(i => i.sex); flag = 0; } var temp = fList.ToList(); temp.Add(f); dataGrid1.ItemsSource = temp; }