zengdj

点滴经验,源自实践

博客园 首页 新随笔 联系 订阅 管理
    初用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

    }

}
posted on 2005-07-01 13:54  DingJun  阅读(770)  评论(0编辑  收藏  举报