EasyUI 中datagrid 点击表头进行排序

本文介绍如何使用EasyUI框架中的数据表格组件实现前后端联动排序功能。通过自定义排序方法,用户可以对表格中的任意列进行升序或降序排列,并且这些排序请求会被正确地传递到后端进行处理。

前台处理:

//排序
function  sort(obj,sortName,sortOrder){
    var queryParams = $('#'+obj).datagrid('options').queryParams;
    queryParams.sortName = sortName;
    queryParams.sortOrder = sortOrder;
    $('#'+obj).datagrid('reload');
}

$('#tt').datagrid({
 
url:'getData.action',//数据来源
 rownumbers:true,//行号
 striped:true,//奇偶行颜色区分
 singleSelect:true,//单选
 fitColumns:true,//列自适应
 nowrap:false,
 columns:[[
  {field:name,width:70,sortable:true,align:'center',title:'人名'}
  {field:score,width:70,sortable:true,align:'center',title:'成绩'}
  
 ]],
 queryParams:{"sortName":"","sortOrder":""},
 remoteSort:false,
 onSortColumn:function (sort,order){
     sort('tt',sort,order);//调用排序方法。
 },
 pagination:true,//显示分页
 pagePosition:'bottom',//分页栏位置 both 上下 bottom、top
 pageList:[12,24,36]//分页数据大小
});

后台处理:

  String sortOrder = request.getParameter("sortOrder");
  String sortName = request.getParameter("sortName");

if(null!=sortName&&!sortName.equals("")){
   String orderargs[]= new String[2];
   orderargs[0]=sortName;
   if(sortName.equals("score")){
    orderargs[1]="name";
    
   }else if(sortName.equals("name")){
    orderargs[1]="score";

   }
   
   if(sortOrder.equals("asc")){
    resultPage=aaManager.getResultPageOrderAsc(dc, rows, startIndex, orderargs);
   }else{
    resultPage=aaManager.getResultPage(dc, rows, startIndex, orderargs);
   }
  }else{
   String orderargs[]={"score"};
   resultPage=aaManager.getResultPage(dc, rows, startIndex, orderargs);
  }

 

 

<think>嗯,用户想在C#的DataGrid中实现点击表头自动排序的功能。我需要回忆一下相关的知识。首先,DataGrid控件在WPF和Windows Forms中可能有所不同,用户没有明确说明,但根据提供的引用,引用[3]提到了WPF DataGrid的SortMemberPath属性,而引用[2]是关于Windows Forms的DataGridView的拖放排序。用户的问题可能是指WPF,因为引用[3]更相关。 接下来,我需要确定如何实现点击表头排序。在WPF的DataGrid中,通常可以通过设置列的SortMemberPath属性,或者处理Sorting事件来自定义排序逻辑。根据引用[3],“WPF DataGrid排序功能通常依赖于 DataGridTextColumn 或 DataGridBoundColumn 的 SortMemberPath 属性”,所以正确绑定数据源并设置SortMemberPath是关键。 用户需要示例代码,所以应该提供一个基本的XAML和C#代码,展示如何设置DataGrid的列,并启用排序。可能需要处理Sorting事件,或者在数据源层面实现排序。例如,如果使用ObservableCollection作为数据源,可能需要使用ListCollectionView来支持排序。 另外,引用[1]中的示例代码是禁用排序,但用户需要的是启用并自定义排序。所以需要确保CanUserSortColumns属性设置为True,并正确配置各列的SortMemberPath。同时,引用[4]提到easyui datagrid表头点击事件处理,虽然环境不同,但思路类似,即处理表头点击事件并执行排序操作。 可能还需要考虑数据绑定情况下的排序,如引用[2]提到的数据绑定可能导致自定义代码失效,因此需要确认数据源是否支持排序。例如,使用ListCollectionView的SortDescriptions来实现。 总结步骤:1. 设置DataGrid的CanUserSortColumns为True;2. 定义各列的SortMemberPath绑定到数据属性;3. 处理Sorting事件进行自定义排序(如果需要);4. 确保数据源支持排序,如使用ListCollectionView。然后编写示例代码,展示这些步骤。</think>在C#中实现DataGrid点击表头自动排序功能,主要涉及以下两种技术方案: ### 方案一:WPF DataGrid原生排序支持 ```xml <DataGrid x:Name="dataGrid1" AutoGenerateColumns="False" CanUserSortColumns="True" ItemsSource="{Binding Items}" Sorting="DataGrid_Sorting"> <DataGrid.Columns> <DataGridTextColumn Header="姓名" Binding="{Binding Name}" SortMemberPath="Name"/> <DataGridTextColumn Header="年龄" Binding="{Binding Age}" SortMemberPath="Age"/> </DataGrid.Columns> </DataGrid> ``` 对应后端代码: ```csharp private void DataGrid_Sorting(object sender, DataGridSortingEventArgs e) { var column = e.Column; var direction = (column.SortDirection != ListSortDirection.Ascending) ? ListSortDirection.Ascending : ListSortDirection.Descending; // 应用排序到数据源 var dataView = CollectionViewSource.GetDefaultView(dataGrid1.ItemsSource); dataView.SortDescriptions.Clear(); dataView.SortDescriptions.Add( new SortDescription(column.SortMemberPath, direction)); column.SortDirection = direction; e.Handled = true; } ``` ### 方案二:数据绑定集合自动排序 ```csharp // 使用支持排序的集合视图 var collection = new ListCollectionView(yourDataSource); collection.SortDescriptions.Add( new SortDescription("Name", ListSortDirection.Ascending)); dataGrid1.ItemsSource = collection; ``` 关键实现要点: 1. 设置`CanUserSortColumns="True"`启用表头排序功能[^3] 2. 通过`SortMemberPath`指定排序依据的字段路径 3. 处理`Sorting`事件实现自定义排序逻辑 4. 使用`ListCollectionView`管理排序状态
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值