locked
C#Web开发,GridView 控件自动排序如何实现 RRS feed

  • 问题

  •  

    最近在做 C# 开发,连接 Access 数据库,在做到显示数据时,用到了 GridView 控件,分页功能已经实现,只差排序就ok了,网上好多资料都是相互转贴,没有几个是真正自己的技术,在找不到解决办法的情况下,给 microsoft msdn发封邮件,让我到这来找,希望能在这遇到 真正的 C# 高手,或者是 microsoft 专家,

    以下是我的 Web 项目的部分代码:

    ShowUsers.aspx.cs文件:

    using System;
    using System.Data;
    using System.Data.OleDb;
    using System.Configuration;
    using System.Collections;
    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 ShowUsers : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {

                this.GridView1.Attributes.Add("SortExpression", "UserId");
                this.GridView1.Attributes.Add("SortDirection", "ASC");

                this.BindData();
            }
        }

        protected void BindData()
        {
            string connectionString = @"Provider=Microsoft.Jet.OleDb.4.0;Data Source=E:\AspConnAccessTest\TestDB.mdb";
            string sql = "SELECT * FROM Users";

            OleDbConnection conn = null;
            OleDbCommand cmd = null;
            OleDbDataAdapter da = null;
            DataSet ds = null;

            try
            {
                conn = new OleDbConnection(connectionString);
                conn.Open();

                cmd = new OleDbCommand(sql, conn);

                da = new OleDbDataAdapter(cmd);

                ds = new DataSet();
                da.Fill(ds);           
               
                this.GridView1.DataSource = ds.Tables[0].DefaultView;
                this.GridView1.DataBind();

            }
            catch (Exception ex)
            {
            }
            finally
            {
                if (conn != null)
                {
                    conn.Close();
                    conn.Dispose();
                }
            }
        }

        protected void GridView1_IndexPageChanging(object sender, GridViewPageEventArgs e)
        {
            GridView1.PageIndex = e.NewPageIndex;
            this.BindData();
        }

        protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
        {        
            string sortExpression = e.SortExpression.ToString();
            string sortDirection = "ASC";

            if (sortExpression == this.GridView1.Attributes["SortExpression"].ToString())
            {

                if (sortDirection == this.GridView1.Attributes["sortDirection"].ToString())
                {
                    sortDirection = "DESC";
                }
                else
                    sortDirection = "ASC";
            }

            this.GridView1.Attributes["sortExpression"] = sortExpression;
            this.GridView1.Attributes["sortDirection"] = sortDirection;

            Response.Write("sortExpression=" + this.GridView1.Attributes["sortExpression"] + "<br>");
            Response.Write("sorDirection=" + this.GridView1.Attributes["sortDirection"] + "<br>");

            this.BindData();    //装载绑定数据
        }
    }

     

    ShowUsers.aspx文件:

    <%@ Page Language="C#" Debug="true" MaintainScrollPositionOnPostback="true" AutoEventWireup="true" CodeFile="ShowUsers.aspx.cs" Inherits="ShowUsers" %>

    <!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>
           <br />
        <form runat="server" action="ShowUsers.aspx">
        <center>
        <div>
            <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" OnPageIndexChanging="GridView1_IndexPageChanging" PageSize="5" OnSorting="GridView1_Sorting">
            </asp:GridView>
        Good
            </div>
            </center></form>
    </body>
    </html>

     

    期待专家的指点。

    2008年9月28日 7:48

答案

  • 微软的教程确实详细,但有些技术的解决资料说明的也不是很完整,也可能是我的技术有限吧,没有找到实际的解决办法,还望专家们不吝赐教,看看我的问题的代码后再回答。谢谢
    2008年9月28日 8:53

全部回复


  • http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.gridview.aspx

    演练:GridView Web 服务器控件的简单排序 

    微软的教程很详细了。
    2008年9月28日 8:31
    版主
  • 微软的教程确实详细,但有些技术的解决资料说明的也不是很完整,也可能是我的技术有限吧,没有找到实际的解决办法,还望专家们不吝赐教,看看我的问题的代码后再回答。谢谢
    2008年9月28日 8:53
  • 网上的教程都是使用数据源来实现的,排序和分页都是自动的,无需任何编码

    比如

    Code Snippet

     

     

    <asp:GridView ID="GridView2" runat="server" AllowPaging="True" 
                AllowSorting="True" DataSourceID="da">
    </asp:GridView>
         
    <asp:AccessDataSource DataFile="~/App_Data/aspxWeb.mdb" ID="da" DataSourceMode="DataSet" runat="server" SelectCommand="select id,title from document"></asp:AccessDataSource>

     

     

    要自己编写代码,需要自己处理的

     

    比如

     

     

        string sql;  //定义类变量,
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                sql = "SELECT id,Title,CreateDate FROM Document";
                this.BindData();
            }
        }

     

     

    protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    {
        string sortExpression = e.SortExpression.ToString();
        string sortDirection = "ASC";


        if (this.GridView1.Attributes["SortExpression"] != null)
        {
            if (sortExpression == this.GridView1.Attributes["SortExpression"].ToString())
            {

                if (sortDirection == this.GridView1.Attributes["sortDirection"].ToString())
                {
                    sortDirection = "DESC";
                }
                else
                    sortDirection = "ASC";
            }
        }


        this.GridView1.Attributes["sortExpression"] = sortExpression;
        this.GridView1.Attributes["sortDirection"] = sortDirection;

        sql = "SELECT id,Title,CreateDate FROM Document Order By " + this.GridView1.Attributes["sortExpression"] + " " + this.GridView1.Attributes["sortDirection"]; //重新设置排序
     

        Response.Write("sortExpression=" + this.GridView1.Attributes["sortExpression"] + "<br>");
        Response.Write("sorDirection=" + this.GridView1.Attributes["sortDirection"] + "<br>");

        this.BindData();    //装载绑定数据
    }

     

    2008年9月29日 0:09
    版主
  •  首先这是一个技术问题,该在asp.net区提问

    还有,我觉得你应该把问题细化来提问,我看你的意思是实现了分页,你不明白机制,来这里提问。(可能我的理解有误)

     

    2008年9月29日 4:05
    版主