GridView自动排序

简介: GridView自带了数据排序功能。在设计视图下,只能对GridView的排序数据列和排序方向进行静态设置。在后台程序中,则需要用Attributes方式对GridView的这两个属性进行动态设置。 示例如下: (前台)DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.
GridView自带了数据排序功能。在设计视图下,只能对GridView的排序数据列和排序方向进行静态设置。在后台程序中,则需要用 Attributes方式对GridView的这两个属性进行动态设置。

示例如下:
(前台)
<% @ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default"  %>

<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >

< html  xmlns ="http://www.w3.org/1999/xhtml"   >
< head  runat ="server" >
    
< title > 无标题页 </ title >
</ head >
< body >
    
< form  id ="form1"  runat ="server" >
    
< div >
        
< asp:GridView  ID ="GridView1"  runat ="server"  AutoGenerateColumns ="False"  CellPadding ="4"  ForeColor ="#333333"  GridLines ="None"  AllowSorting ="True"  OnSorting ="GridView1_Sorting" >
            
< FooterStyle  BackColor ="#507CD1"  Font-Bold ="True"  ForeColor ="White"   />
            
< RowStyle  BackColor ="#EFF3FB"   />
            
< Columns >
                
< asp:BoundField  DataField ="id"  HeaderText ="ID"  SortExpression ="id"   />
                
< asp:BoundField  DataField ="name"  HeaderText ="NAME"  SortExpression ="name"   />
                
< asp:BoundField  DataField ="age"  HeaderText ="AGE"  SortExpression ="age"   />
            
</ Columns >
            
< PagerStyle  BackColor ="#2461BF"  ForeColor ="White"  HorizontalAlign ="Center"   />
            
< SelectedRowStyle  BackColor ="#D1DDF1"  Font-Bold ="True"  ForeColor ="#333333"   />
            
< HeaderStyle  BackColor ="#507CD1"  Font-Bold ="True"  ForeColor ="White"   />
            
< EditRowStyle  BackColor ="#2461BF"   />
            
< AlternatingRowStyle  BackColor ="White"   />
        
</ asp:GridView >
    
</ div >
    
</ form >
</ body >
</ html >

前台注意点:
需要对GridView启用AllowSorting、设置OnSorting事件,对需要排序的列设定SortExpression属性。

(后台)
using  System;
using  System.Data;
using  System.Configuration;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;

public   partial   class  _Default : System.Web.UI.Page 
{
    
protected   void  Page_Load( object  sender, EventArgs e)
    {
        
if  ( ! IsPostBack)
        {
            
//  设定初始排序参数值

            
//  错误的属性设置方法:SortExpression、SortDirection均是GridView只读属性,无法直接赋值。
            
// this.GridView1.SortExpression = "id";
            
// this.GridView1.SortDirection = "ASC";

            
//  正确的属性设置方法
             this .GridView1.Attributes.Add( " SortExpression " " id " );
            
this .GridView1.Attributes.Add( " SortDirection " " ASC " );

            
//  绑定数据源到GridView
             this .BindGridView();
        }
    }

    
///   <summary>
    
///  GridView排序事件
    
///   </summary>
     protected   void  GridView1_Sorting( object  sender, GridViewSortEventArgs e)
    {
        
//  从事件参数获取排序数据列
         string  sortExpression  =  e.SortExpression.ToString();

        
//  假定为排序方向为“顺序”
         string  sortDirection  =   " ASC " ;

        
//  “ASC”与事件参数获取到的排序方向进行比较,进行GridView排序方向参数的修改
         if  (sortExpression  ==   this .GridView1.Attributes[ " SortExpression " ])
        {
            
// 获得下一次的排序状态
            sortDirection  =  ( this .GridView1.Attributes[ " SortDirection " ].ToString()  ==  sortDirection  ?   " DESC "  :  " ASC " );
        }

        
//  重新设定GridView排序数据列及排序方向
         this .GridView1.Attributes[ " SortExpression " =  sortExpression;
        
this .GridView1.Attributes[ " SortDirection " =  sortDirection;

        
this .BindGridView();
    }

    
///   <summary>
    
///  绑定到GridView
    
///   </summary>
     private   void  BindGridView()
    {
        
//  获取GridView排序数据列及排序方向
         string  sortExpression  =   this .GridView1.Attributes[ " SortExpression " ];
        
string  sortDirection  =   this .GridView1.Attributes[ " SortDirection " ];

        
//  调用业务数据获取方法
        DataTable dtBind  =   this .getDB();

        
//  根据GridView排序数据列及排序方向设置显示的默认数据视图
         if  (( ! string .IsNullOrEmpty(sortExpression))  &&  ( ! string .IsNullOrEmpty(sortDirection)))
        {
            dtBind.DefaultView.Sort 
=   string .Format( " {0} {1} " , sortExpression, sortDirection);
        }

        
//  GridView绑定并显示数据
         this .GridView1.DataSource  =  dtBind;
        
this .GridView1.DataBind();
    }

    
///   <summary>
    
///  获取数据源的方法
    
///   </summary>
    
///   <returns> 数据源 </returns>
     private  DataTable getDB()
    {
        DataTable dt 
=   new  DataTable();

        dt.Columns.Add(
" id " );
        dt.Columns.Add(
" name " );
        dt.Columns.Add(
" age " );

        dt.Rows.Add(
new   object [] {  " 000001 " " hekui " " 26 "  });
        dt.Rows.Add(
new   object [] {  " 000002 " " zhangyu " " 26 "  });
        dt.Rows.Add(
new   object [] {  " 000003 " " zhukundian " " 27 "  });
        dt.Rows.Add(
new   object [] {  " 000004 " " liyang " " 25 "  });
        dt.Rows.Add(
new   object [] {  " 000005 " " caili " " 27 "  });

        
return  dt;
    }
}

示例工程:
/Files/heekui/GridViewSort.rar
目录
相关文章
|
C#
C# ListBox实现显示插入最新的数据的方法
原文:C# ListBox实现显示插入最新的数据的方法 在我们使用ListBox控件时,如果我们在里面不断的添加一条条数据,但是在我们添加的数据过多超过了ListBox显示的窗口时(此时会产生滑动条), 发现我们无法看到最新添加的数据。
1729 0