datagrid点击标题进行排序

步骤:
 1.页面上首先设置datagrid的AllowSorting="true",以及指定排序方法OnSortCommand="DataGrid1_SortCommand"
2.在列的header处指定排序字段如SortExpression="keyword"
3.后台cs部分 本例使用了ViewState["orderBy"]来保存排序字段和规则( SetSql();是我实例中的datagrid绑定方法)
 PS:绑定datagrid后,要修改列SortExpression中相反的排序顺序
 1     protected   void  DataGrid1_SortCommand( object  source, DataGridSortCommandEventArgs e)
 2      {
 3 
 4          ViewState[ " orderBy " =  e.SortExpression;
 5          SetSql();
 6           // 找到排序的列,并修改把它的排序属性 
 7          DataGridColumn clm  =   null
 8           for  ( int  i  =   0 ; i  <  DataGrid1.Columns.Count; i ++ )
 9          {
10               if  (DataGrid1.Columns[i].SortExpression  ==  e.SortExpression)
11              {
12                  clm  =  DataGrid1.Columns[i];
13                   break ;
14              }
15          }
16           if  (clm  ==   null return ;
17 
18           if  (e.SortExpression.ToLower().IndexOf( " desc " >   0 )
19          {
20              clm.SortExpression  =  e.SortExpression.ToLower().Replace( " desc " " asc " );
21          }
22           else
23          {
24               if  (e.SortExpression.ToLower().IndexOf( " asc " >   0 )
25              {
26                  clm.SortExpression  =  e.SortExpression.ToLower().Replace( " asc " " desc " );
27              }
28               else
29              {
30                  clm.SortExpression  =  e.SortExpression.ToLower()  +   "  desc " ;
31              }
32          }
33         
34      }

 特别提示:
i.OnSortCommand、OnSelectCommand、OnDeleteCommand和OnUpdateCommand方法是在OnItemCommand执行之后起作用。如DataGrid1_ItemCommand中的处理是要排除Header的,有必要做如下处理:
 
CodeDataGrid1_ItemCommand方法
protected   void  DataGrid1_ItemCommand( object  source, DataGridCommandEventArgs e)
    {
        
if  (e.Item.ItemType !=   ListItemType.Item || e.Item.ItemType != ListItemType.AlternatingItem)
            
return ;
   }


ii.排序后,重新绑定datagrid也是不可缺少的功课。

附录:
MS对DataGrid、DataList和Repeater的ListItemType,自动有AlternatingItem的解释 Even if you have not created an in your Repeater control, every other row still has an ItemType of ListItemType.. Therefore, you must check for both ListItemType.Item and ListItemType.AlternatingItem to process every row.

转载于:https://www.cnblogs.com/hyqiang168/archive/2007/12/07/986806.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值