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.

你可能感兴趣的:(datagrid)