利用模板列实现DataGrid控件的双向排序

    初用DataGrid控件,想实现点击表头来对数据进行双向排序,费了老半天工夫才摸索出如下的东东来,请看效果图:  
   
利用模板列实现DataGrid控件的双向排序

DataGrid设置如下:

< asp:DataGrid  id ="faggruppeGrid"  runat ="server"  BorderColor ="Black"  BorderWidth ="1px"  CellPadding ="3"
    Width
="300px"  HeaderStyle-BackColor ="#7f9db9"  HorizontalAlign ="Center"  AutoGenerateColumns ="False"
    AllowSorting
="True" >
    
< HeaderStyle  BackColor ="#7F9DB9" ></ HeaderStyle >
    
< Columns >
    
<!--  第一列  -->
     
< asp:TemplateColumn >
      
< HeaderTemplate >
       
< asp:LinkButton  id ="lbFag"  runat ="server"  CommandName ="sort"  CommandArgument ="Fag"  CausesValidation ="False" > Fag </ asp:LinkButton >
       
< asp:Image  Runat ="server"  ID ="ImgFag"  ImageUrl ="../images/Up.gif"  Visible ="False"   />      <!-- 箭头图标 -->
      
</ HeaderTemplate >
      
< ItemTemplate >
       
< asp:Label  runat ="server"  Text ='<%#  DataBinder.Eval(Container, "DataItem.Fag") % > ' ID="Label1"/>
      
</ ItemTemplate >
     
</ asp:TemplateColumn >
    
<!--  第二列  -->
     
< asp:TemplateColumn >
      
< HeaderTemplate >
       
< asp:LinkButton  id ="lbNavn"  runat ="server"  CommandName ="sort"  CommandArgument ="Navn"  CausesValidation ="False" > Navn </ asp:LinkButton >
       
< asp:Image  Runat ="server"  ID ="ImgNavn"  ImageUrl ="../images/Up.gif"  Visible ="False"   />
      
</ HeaderTemplate >
      
< ItemTemplate >
       
< asp:Label  runat ="server"  Text ='<%#  DataBinder.Eval(Container, "DataItem.Navn") % > ' ID="Label2"/>
      
</ ItemTemplate >
     
</ asp:TemplateColumn >
    
<!--  第三列  -->
     
< asp:HyperLinkColumn  DataNavigateUrlField ="Fag"  DataNavigateUrlFormatString ="JavaScript:ReturnFagnummer('{0}');"  Text ="Indsæt"   />
    
</ Columns >
   
</ asp:DataGrid >



后台处理代码:

 

using  System;
using  System.Collections;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Web;
using  System.Web.SessionState;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.HtmlControls;
using  Pensam.Praesentation.BMSWIService;
using  Pensam.GenNS;
using  Microsoft.ApplicationBlocks.ExceptionManagement;

namespace  Pensam.Praesentation.Medarbejder
{
    
/// <summary>
    
/// Summary description for FaggruppeListe.
    
/// </summary>

    public class FaggruppeListe : BaseWebPage
    
{
        
#region member variables
        
protected System.Web.UI.WebControls.DataGrid faggruppeGrid;
        
protected System.Web.UI.WebControls.Image ImgArrow = null;
        
private DataTable dt = null;
        
#endregion


        
private void Page_Load(object sender, System.EventArgs e)
        
{
            VisFagGrps();
            
if(!this.IsPostBack) BindGrid();
            
//if(this.IsPostBack) Response.Write("post back");
        }


        
#region Web Form Designer generated code
        
override protected void OnInit(EventArgs e)
        
{
            
//
            
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
            
//
            InitializeComponent();
            
base.OnInit(e);
        }

        
        
/// <summary>
        
/// Required method for Designer support - do not modify
        
/// the contents of this method with the code editor.
        
/// </summary>

        private void InitializeComponent()
        
{    
            
this.faggruppeGrid.SortCommand += new System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.faggruppeGrid_SortCommand);
            
this.faggruppeGrid.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.faggruppeGrid_ItemDataBound);
            
this.Load += new System.EventHandler(this.Page_Load);

        }

        
#endregion


        
#region private functions
        
//生成绑定数据
        private void VisFagGrps()
        
{
            
/*
            using(PSLog logger = new PSLog())
            {
                try
                {
                    if(this.ServiceDelegate == null) return;
                    ArrayList list1 = new ArrayList(this.ServiceDelegate.GetFaggruppeListe());
                    if(list1 == null)
                    {
                        this.VisErrorMessage("Get professional category list failed.");
                    }
                }
                catch(Exception ex)
                {
                    VisErrorMessage(ex.Message);
                    ExceptionManager.Publish(ex);
                }
            }
            
*/

            

            dt 
= new DataTable();
            DataRow dr;

            dt.Columns.Add(
new DataColumn("Fag"typeof(string)));
            dt.Columns.Add(
new DataColumn("Navn"typeof(string)));

            dr 
= dt.NewRow();
            dr[
"Fag"= "Fag01000001";
            dr[
"Navn"= "Fag0101";
            dt.Rows.Add(dr);

            dr 
= dt.NewRow();
            dr[
"Fag"= "Fag01000002";
            dr[
"Navn"= "Fag0102";
            dt.Rows.Add(dr);

            dr 
= dt.NewRow();
            dr[
"Fag"= "Fag01000003";
            dr[
"Navn"= "Fag0103";
            dt.Rows.Add(dr);

            dr 
= dt.NewRow();
            dr[
"Fag"= "Fag02000001";
            dr[
"Navn"= "Fag0201";
            dt.Rows.Add(dr);

            dr 
= dt.NewRow();
            dr[
"Fag"= "Fag02000002";
            dr[
"Navn"= "Fag0202";
            dt.Rows.Add(dr);

            dr 
= dt.NewRow();
            dr[
"Fag"= "Fag02000003";
            dr[
"Navn"= "Fag0203";
            dt.Rows.Add(dr);

            dr 
= dt.NewRow();
            dr[
"Fag"= "Fag03000001";
            dr[
"Navn"= "Fag0301";
            dt.Rows.Add(dr);

            dr 
= dt.NewRow();
            dr[
"Fag"= "Fag03000002";
            dr[
"Navn"= "Fag0302";
            dt.Rows.Add(dr);

            dr 
= dt.NewRow();
            dr[
"Fag"= "Fag03000003";
            dr[
"Navn"= "Fag0303";
            dt.Rows.Add(dr);
        }


        
private void faggruppeGrid_SortCommand(Object sender, DataGridSortCommandEventArgs e) 
        
{
            System.Web.UI.Control control 
= ((DataGridItem)e.CommandSource).FindControl("ImgArrow");
            
//Response.Write(control.ToString());
            ImgArrow = (System.Web.UI.WebControls.Image)control;
            
string SortField = (string)e.SortExpression;
            
string oldSortParam = faggruppeGrid.Attributes["SortExpression"];
            
if(oldSortParam.StartsWith(SortField))
            
{
                
//order by the same column.
                 if(oldSortParam.EndsWith("ASC")) 
                    
{
                         oldSortParam 
= oldSortParam.Replace("ASC","DESC");
                         
//ImgArrow.ImageUrl = "../Images/Up.gif"; //实践证明在此设置图像行不通,需在ItemDataBound事件中实现。
                    }

                    
else
                    
{
                        oldSortParam 
= oldSortParam.Replace("DESC","ASC");
                        
//ImgArrow.ImageUrl = "../Images/Up.gif"; //实践证明在此设置图像行不通,需在ItemDataBound事件中实现。
                    }


            }

            
else
            
{
                oldSortParam 
= SortField + " ASC";
            }

            faggruppeGrid.Attributes[
"SortExpression"= oldSortParam;
            BindGrid();
        }


        
//绑定数据
        private void BindGrid()
        
{
            
//设置初始排序字段
            if(faggruppeGrid.Attributes["SortExpression"== null)
                faggruppeGrid.Attributes[
"SortExpression"= "Fag ASC";
            DataView dv 
= dt.DefaultView;
            
//按指定的排序字段排序
            dv.Sort = faggruppeGrid.Attributes["SortExpression"];
            faggruppeGrid.DataSource 
= dt;
            faggruppeGrid.DataBind();
        }


        
private void faggruppeGrid_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
        
{
            
if(e.Item.ItemType != ListItemType.Header) return;
            
//以下获取排序表达式
            if(faggruppeGrid.Attributes["SortExpression"]==nullreturn;
            
string sortExpression = faggruppeGrid.Attributes["SortExpression"];
            
string[] orderParams = sortExpression.Split(' ');
             
//获取Image对象
            System.Web.UI.Control control = (e.Item).FindControl("Img" + orderParams[0]);

            
if(control == nullreturn;
            ImgArrow 
= (System.Web.UI.WebControls.Image)control;
            ImgArrow.Visible 
= true;

            
//设置图像Url
            if(sortExpression.EndsWith("ASC")) 
                ImgArrow.ImageUrl 
= "../Images/Up.gif";
            
else
                ImgArrow.ImageUrl 
= "../Images/Down.gif";
        }


        
#endregion

    }

}

你可能感兴趣的:(datagrid)