<%@ Import Namespace="System.Data" %><html>
 
<script language="C#" runat="server">    string SortField;    ICollection CreateDataSource() {
        DataTable dt = new DataTable();
        DataRow dr;        dt.Columns.Add(new DataColumn("整数值", typeof(Int32)));
        dt.Columns.Add(new DataColumn("字符串值", typeof(string)));
        dt.Columns.Add(new DataColumn("日期时间值", typeof(DateTime)));
        dt.Columns.Add(new DataColumn("布尔值", typeof(bool)));
        dt.Columns.Add(new DataColumn("货币值", typeof(double)));        for (int i = 0; i < 9; i++) {
            dr = dt.NewRow();            dr[0] = 9-i;
            dr[1] = "项 " + i.ToString();
            dr[2] = DateTime.Now;
            dr[3] = (i % 2 != 0) ? true : false;
            dr[4] = 1.23 * (i+1);            dt.Rows.Add(dr);
        }        DataView dv = new DataView(dt);
        dv.Sort = SortField;
        return dv;
    }    void Page_Load(Object sender, EventArgs e) {
        if (!IsPostBack) {
            if (SortField == "") {
                SortField = "IntegerValue";
            }    
            BindGrid();
        }    
    }    void MyDataGrid_Sort(Object sender, DataGridSortCommandEventArgs e) {
        SortField = (string)e.SortExpression;
        BindGrid();
    }    void BindGrid() {
        MyDataGrid.DataSource = CreateDataSource();
        MyDataGrid.DataBind();
    }
</script><body>    <h3><font face="宋体">DataGrid 中的基本排序</font></h3>    <form runat=server>      <ASP:DataGrid id="MyDataGrid" runat="server"
        AllowSorting="true"
        OnSortCommand="MyDataGrid_Sort"
        BorderColor="black"
        BorderWidth="1"
        CellPadding="3"
        Font-Name="宋体"
        Font-Size="8pt"
        HeaderStyle-BackColor="#ccccff"
        HeaderStyle-ForeColor="black"
      />  </form></body>
</html>

解决方案 »

  1.   

    看到msdn上说DataGrid.AllowSorting = true就可以把column header变成link button,然后点击就自动会以该字段进行排序,为什么不行啊?
    ---------------------------------------------------当然不行啦,排序的代码还是要写的
      

  2.   

    <%@ Page language="c#" Codebehind="AccountsList.aspx.cs" AutoEventWireup="false" Inherits="MovieAdmin.AccountMangement.AccountsList" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>AccountsList</title>
    <meta content="Microsoft Visual Studio 7.0" name="GENERATOR">
    <meta content="C#" name="CODE_LANGUAGE">
    <meta content="JavaScript" name="vs_defaultClientScript">
    <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    </HEAD>
    <body background="../image/bg.gif">
    <form id="AccountsList" method="post" runat="server">
    <FONT face="宋体">
    <TABLE id="Table1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" cellSpacing="1"
    cellPadding="1" width="100%" border="0">
    <TR>
    <TD><asp:datagrid id="dgdQuery" runat="server" Width="100%" AutoGenerateColumns="False" AllowSorting="True"
    PageSize="20" AllowPaging="True" OnSortCommand="dgdQuery_SortCommand" OnPageIndexChanged="dgdQuery_PageIndexChanged"
    BorderColor="White" BorderStyle="Ridge" BorderWidth="2px" BackColor="White" CellPadding="1"
    GridLines="None" CellSpacing="1">
    <SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#9471DE"></SelectedItemStyle>
    <ItemStyle Font-Size="10pt" HorizontalAlign="Center" ForeColor="Black" BackColor="#DEDFDE"></ItemStyle>
    <HeaderStyle Font-Size="10pt" Font-Bold="True" HorizontalAlign="Center" ForeColor="#E7E7FF" BackColor="#4A3C8C"></HeaderStyle>
    <FooterStyle Wrap="False" ForeColor="Black" BackColor="#C6C3C6"></FooterStyle>
    <Columns>
    <asp:TemplateColumn HeaderText="Select">
    <ItemTemplate>
    <asp:CheckBox id="MyCheckBox" runat="server"></asp:CheckBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn SortExpression="UserID" HeaderText="UserID" HeaderStyle-HorizontalAlign="Center">
    <HeaderStyle></HeaderStyle>
    <ItemTemplate>
    <asp:Label id=lblUserID runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "UserID") %>'>
    </asp:Label>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn Visible="False" SortExpression="Password" HeaderText="Password">
    <ItemTemplate>
    <asp:Label Text='<%# DataBinder.Eval(Container.DataItem, "Password") %>' runat="server" />
    </ItemTemplate>
    <EditItemTemplate>
    <asp:TextBox Text='<%# DataBinder.Eval(Container.DataItem, "Password") %>' ID="txtAdminPassword" Runat=server NAME="Textbox1">
    </asp:TextBox>
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn SortExpression="FirstName" HeaderText="FirstName">
    <ItemTemplate>
    <asp:Label Text='<%# DataBinder.Eval(Container.DataItem, "FirstName") %>' runat="server" />
    </ItemTemplate>
    <EditItemTemplate>
    <asp:TextBox Text='<%# DataBinder.Eval(Container.DataItem, "FirstName") %>' ID="txtAdminFirstName" Runat=server NAME="Textbox1">
    </asp:TextBox>
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn SortExpression="LastName" HeaderText="LastName">
    <ItemTemplate>
    <asp:Label Text='<%# DataBinder.Eval(Container.DataItem, "LastName") %>' runat="server" />
    </ItemTemplate>
    <EditItemTemplate>
    <asp:TextBox Text='<%# DataBinder.Eval(Container.DataItem, "LastName") %>' ID="txtAdminLastName" Runat=server NAME="Textbox1">
    </asp:TextBox>
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn SortExpression="Gender" HeaderText="Gender">
    <ItemTemplate>
    <asp:Label Text='<%# DataBinder.Eval(Container.DataItem, "Gender") %>' runat="server" ID="Label4"/>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:TextBox Text='<%# DataBinder.Eval(Container.DataItem, "Gender") %>' ID="txtAdminEmail" Runat=server NAME="Textbox1">
    </asp:TextBox>
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn SortExpression="Country" HeaderText="Country">
    <ItemTemplate>
    <asp:Label Text='<%# DataBinder.Eval(Container.DataItem, "Country") %>' runat="server" ID="Label2"/>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:TextBox Text='<%# DataBinder.Eval(Container.DataItem, "Country") %>' ID="Textbox1" Runat=server NAME="Textbox1">
    </asp:TextBox>
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn SortExpression="RemainingPoints" HeaderText="Remaining Points">
    <ItemTemplate>
    <asp:Label Text='<%# DataBinder.Eval(Container.DataItem, "RemainingPoints") %>' runat="server" ID="Label3"/>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:TextBox Text='<%# DataBinder.Eval(Container.DataItem, "RemainingPoints") %>' ID="Textbox2" Runat=server NAME="Textbox1">
    </asp:TextBox>
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn SortExpression="IsLocked" HeaderText="AccountLocked">
    <ItemTemplate>
    <asp:Label Text='<%# DataBinder.Eval(Container.DataItem, "AccountLocked") %>' runat="server" ID="Label1"/>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn SortExpression="RegisterTime" HeaderText="RegisterTime">
    <ItemTemplate>
    <asp:Label Text='<%# DataBinder.Eval(Container.DataItem, "RegisterTime") %>' runat="server" ID="Label5"/>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:HyperLinkColumn Text="Details" DataNavigateUrlField="URLField"></asp:HyperLinkColumn>
    </Columns>
    <PagerStyle HorizontalAlign="Left" ForeColor="Black" BackColor="#C6C3C6" Mode="NumericPages"></PagerStyle>
    </asp:datagrid></TD>
    </TR>
    <TR>
    <TD align="right"><FONT face="宋体">
    <asp:Button id="btnSearch" runat="server" Text="Re-Search>>" Visible="False"></asp:Button>&nbsp;&nbsp;&nbsp;&nbsp;</FONT></TD>
    </TR>
    <TR>
    <TD><FONT face="宋体"></FONT></TD>
    </TR>
    </TABLE>
    </FONT>
    </form>
    </body>
    </HTML>
      

  3.   

    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;namespace MovieAdmin.AccountMangement
    {
    /// <summary>
    /// AccountsList 的摘要说明。
    /// </summary>
    public class AccountsList : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.DataGrid dgdQuery;
    protected System.Web.UI.WebControls.Button btnSearch; Classes.DBOperate DB=new Classes.DBOperate();

    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    if(!Page.IsPostBack)
    {
    if(Request.QueryString["IsRedictFromQuery"]!=null)
    {
    Session.Remove("IsRedictFromQuery");
    btnSearch.Visible=true;
    }
    else
    {
    Session["QueryString"]="Select UserID,Password,FirstName,LastName,Email,Address1,Address2,City,State,Zip,DayPhone,RegisterTime,EvePhone,Birthday,"+
    "T_User.GenderID as GenderID,T_Country.CountryName as Country,T_Country.CountryID as CountryID,RemainingPoints,"+
    "case T_User.GenderID when 0 then 'Male' else 'Female' end as Gender,case T_User.AccountLocked when 0 then 'false' else 'true' end "+
    "as AccountLocked,'AccountInfoShow.aspx?UserID='+T_User.UserID as URLField from T_User,T_Country where T_User.CountryID=T_Country.CountryID";
    }
    Session["SortField"]="UserID";
    Session["SortOrder"]=" asc";
    BindGrid(Session["QueryString"].ToString(),Session["SortField"].ToString());

    }
    } #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click);
    this.dgdQuery.SelectedIndexChanged += new System.EventHandler(this.dgdQuery_SelectedIndexChanged);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion
    private void btnAdd_Click(object sender, System.EventArgs e)
    {

    }
    private void BindGrid(string QueryString,string SortField)
    {
    DataSet DS=DB.Query(QueryString);
    DataView DW=DS.Tables[0].DefaultView;
    DW.Sort=SortField;
    dgdQuery.DataSource=DW;
    dgdQuery.DataBind();
    } protected void dgdQuery_SortCommand(Object sender, DataGridSortCommandEventArgs e)
    {
    if(Session["SortField"].ToString()==e.SortExpression&Session["SortOrder"].ToString()!=" desc")
    {
    Session["SortOrder"]=" desc";
    BindGrid(Session["QueryString"].ToString(),e.SortExpression+" desc");
    }
    else if(Session["SortField"].ToString()==e.SortExpression&Session["SortOrder"].ToString()==" desc")
    {
    Session["SortOrder"]=" asc";
    BindGrid(Session["QueryString"].ToString(),e.SortExpression);
    }
    else
    {
    Session["SortOrder"]=" asc";
    Session["SortField"]=e.SortExpression;
    BindGrid(Session["QueryString"].ToString(),e.SortExpression);
    } }
    protected void dgdQuery_PageIndexChanged(Object sender, DataGridPageChangedEventArgs e)
    {
    dgdQuery.CurrentPageIndex=e.NewPageIndex;
    BindGrid(Session["QueryString"].ToString(),Session["SortField"].ToString()+Session["SortOrder"].ToString()); } private void btnSearch_Click(object sender, System.EventArgs e)
    {
    Response.Redirect("SearchUsers.aspx");
    } private void dgdQuery_SelectedIndexChanged(object sender, System.EventArgs e)
    {

    }
    }
    }
      

  4.   

    排序的代码
    Private Sub DataGrid1_SortCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridSortCommandEventArgs) Handles DataGrid1.SortCommand
            Dim SortField As String
            SortField = e.SortExpression.ToString        Me.DataGrid1.Attributes("SortExpression") = SortField     '设置所要排序的字段
            If Me.DataGrid1.Attributes("SortDirection") = "ASC" Then     '如果原先是升序,则将当前设为降序,否则反之
                Me.DataGrid1.Attributes("SortDirection") = "DESC"
            Else
                Me.DataGrid1.Attributes("SortDirection") = "ASC"
            End If        MySort(SortField)   '调用排序函数
        End Sub    Private Sub MySort(ByVal SortField As String)
            '进行排序
            Dim thisSortField As String        thisSortField = Me.DataGrid1.Attributes("SortExpression")
            thisMode = Me.DataGrid1.Attributes("SortDirection")        Dim dv As New DataView
            Dim ds As New DataSet        Dim ad As New SqlDataAdapter("select * from 表名", Me.SqlConnection1)        ad.Fill(ds)
            dv = ds.Tables(0).DefaultView        dv.Sort = thisSortField + " " + thisMode
            Me.DataGrid1.DataSource = dv
            Me.DataGrid1.DataBind()
        End Sub