Asp.Net GridView點擊標題排序方法

 Asp.Net GridView點擊標題排序方法
今天需要用到在GridView中點擊標題排序,琢磨了半天,終於成功了。在看代碼之前需要說明一點:
      GridView本身有一个Sort()函数:public virtual void Sort ( string sortExpression,    SortDirection sortDirection)使用上相当方便。但在实际使用中,常用的是点击每一列的标题来排序,点击标题会触发:protected void GridView_Sorting(object sender, GridViewSortEventArgs e)事件。从GridViewSortEventArgs中可以拿到SortDirection和SortExpression。但是GridView.Sort()本身也会触发GridView_Sorting(),如果在GridView_Sorting()中调用GridView.Sort()会无限的循环,直到堆栈溢出。這里使用DataView.Sort属性来排序,(Sort方法會觸發 Sorting 事件),再重新綁定到GridView上。

代碼如下:

1、在源碼中給GridView中加入AllowSorting屬性
     // 1、在源碼的GridView中加入AllowSorting="true"    
     < asp:GridView ID = " gvData " runat = " server "    AllowSorting = " true " >
    
</ asp:GridView >

2、    ClbComunication.clsComunication類中定義了一個屬性,用於暫存從數據庫得到的資料:
    注:定義此屬性是因為頁面顯示后,剛才得的資料表(mdatatable)的資料會被清空。所以將得到的資料暫存於類中,便於調用。

         /// <summary>
        
/// 存放資料DataView屬性的變量
        
/// </summary>
         private static DataView dvValue = new DataView();
        
/// <summary>
        
/// 存放資料DataView屬性
        
/// </summary>
         public static DataView dv
         {
            
get { return dvValue; }
            
set { dvValue = value; }
         }

3、將資料放入類的DataView屬性中保存

         // 得到資料(BOFactory.bofactory.GetOracleDataTable(mSQL_Selection)為從數據庫得到資料)
         DataTable mdatatable = BOFactory.bofactory.GetOracleDataTable(mSQL_Selection);
        
// 將需要排序的資料放入DataView中(主要用到此句)
         ClbComunication.clsComunication.dv = new DataView(mdatatable);
        
// 資料與界面上的GridView綁定
         gvData.DataBind();

4、訂閱GridView的Sorting事件

     // GridView的Sorting事件
     gvData.Sorting += new GridViewSortEventHandler(gvData_Sorting);

5、編輯GridView的Sorting事件方法,其中用到的GridViewSortDirection屬性的定義如"6"所示

     /// <summary>
    
/// GridView的Sorting事件方法
    
/// </summary>
    
/// <param name="sender"></param>
    
/// <param name="e"></param>
     void gvData_Sorting( object sender, GridViewSortEventArgs e)
     {
        
string sortExpression = e.SortExpression.ToUpper();
        
if (GridViewSortDirection == SortDirection.Ascending)
         {
             GridViewSortDirection
= SortDirection.Descending;
            
// 排序並重新綁定
             bindData(sortExpression, " DESC " );
         }
        
else if (GridViewSortDirection == SortDirection.Descending)
         {
             GridViewSortDirection
= SortDirection.Ascending;
            
// 排序並重新綁定
             bindData(sortExpression, " ASC " );
         }
     }

6、定義排序方向屬性,此属性用viewstate保存每次排序的方向:

     /// <summary>
    
/// 排序方向屬性
    
/// </summary>
     public SortDirection GridViewSortDirection
     {
        
get
         {
            
if (ViewState[ " sortDirection " ] == null )
                 ViewState[
" sortDirection " ] = SortDirection.Ascending;
            
return (SortDirection)ViewState[ " sortDirection " ];
         }
        
set
         {
             ViewState[
" sortDirection " ] = value;
         }
     }

7、排序並綁定數據

     /// <summary>
    
/// 排序並綁定數據
    
/// </summary>
    
/// <param name="sortExpression"></param>
    
/// <param name="sortDirection"></param>
     protected void bindData( string sortExpression, string sortDirection)
     {
         ClbComunication.clsComunication.dv.Sort
= sortExpression;
        
if (sortDirection != String.Empty)
         {
             ClbComunication.clsComunication.dv.Sort
= sortExpression + " " + sortDirection;
         }
         gvData.DataSource
= ClbComunication.clsComunication.dv;
         gvData.DataBind();
     }
为了您的安全,请只打开来源可靠的网址

打开网站    取消

来自: http://hi.baidu.com/zhu888/blog/item/337f9aee56a6162f2df5348f.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值