积极答复者
C#Web开发,GridView 控件自动排序如何实现

问题
-
最近在做 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
答案
全部回复
-
网上的教程都是使用数据源来实现的,排序和分页都是自动的,无需任何编码
比如
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版主