怎样可以通过代码对gridview进行排序

hagane 2008-05-13 05:37:58
问题同上
环境是VS2005,系统是WINXP

我的数据源是在后台指定的,我搜索过的结果全部是在设计视图里指定好了数据源,之后选择允许排序的复选框就可以了,但为了系统的可维护性,一定要制定指定代码去指定数据源,这样的话其他的功能全部都要代码去指定了。

关于排序,我知道要将AllowSorting属性设置为True,并且要写Sorting事件,但Sorting事件当中并不清楚写什么,我曾经写过这样的代码在Sorting事件中:this.GridView1.Sort(e.SortExpression, SortDirection.Ascending);事实证明这个事件会一直触发,但我已经想不到更好的办法了,所以来请教一下各位,有没有什么更好的办法来解决
...全文
278 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
澜月 2011-12-05
  • 打赏
  • 举报
回复
顶3楼~~
studentlove 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 rodking 的回复:]

基本思路是在sql语句中预留个order by [column],然后根据界面上点击的列来确定 [column],然后再sorting事件中重新加载下数据
[/Quote]
这个已经可以完成任务,些一个数据源绑定,处理分页情况就全部搞定。
phper2008 2008-05-13
  • 打赏
  • 举报
回复
3楼给的答案已经正确!
gaofenfei 2008-05-13
  • 打赏
  • 举报
回复
发错了
aspx.cs在这里··
using System;
using System.Data;
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 Test8_TestGvsSelectInCode2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SqlDataSource dataSource = FactoryAdo.GetSqlDataSource();
dataSource.SelectCommand = "Select * From StuInfo";
DataSourceSelectArguments arg = new DataSourceSelectArguments();
DataView dv = (DataView)dataSource.Select(arg);

gvShowData.DataSource = dv;
gvShowData.DataBind();
Session["data"] = dv;
}
}
protected void gvShowData_Sorting(object sender, GridViewSortEventArgs e)
{
DataView dv = (DataView)Session["data"];
dv.Sort = e.SortExpression;
gvShowData.DataSource = dv;
gvShowData.DataBind();
}
protected void gvShowData_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
DataView dv = (DataView)Session["data"];
gvShowData.PageIndex = e.NewPageIndex;
gvShowData.DataSource = dv;
gvShowData.DataBind();
}
}


那个是FactoryAdo.cs后台代码调用的类
wzy_love_sly 2008-05-13
  • 打赏
  • 举报
回复
我自己练习的例子
wzy_love_sly 2008-05-13
  • 打赏
  • 举报
回复
    protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
DataSet ds = new DataSet();
ds = Get_pking_DataSet("select * from users");
int i = ds.Tables[0].Rows.Count;
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
ViewState["dt"] = ds.Tables[0];
ViewState["ifasc"] = "0";
}
}
public DataSet Get_pking_DataSet(string SQLString)
{
string connectionStringQuery = "server=.;database=my;uid=sa;pwd=bb";
using (SqlConnection connection = new SqlConnection(connectionStringQuery))
{
DataSet ds = new DataSet();
try
{
connection.Open();
SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
command.Fill(ds, "ds");
}
catch (System.Data.SqlClient.SqlException ex)
{
throw new Exception(ex.Message);
}
return ds;
}
}
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
string sortExpression = e.SortExpression;

if (ViewState["ifasc"].ToString() == "0")
{
SortGridView(sortExpression, " ASC");
ViewState["ifasc"] = "1";
}
else
{
SortGridView(sortExpression, " DESC");
ViewState["ifasc"] = "0";
}
}
private void SortGridView(string sortExpression, string direction)
{
DataTable dt = (DataTable)(ViewState["dt"]);
DataView dv = dt.DefaultView;
dv.Sort = sortExpression + direction;
GridView1.DataSource = dv;
GridView1.DataBind();
}


gaofenfei 2008-05-13
  • 打赏
  • 举报
回复
给你一个例子··希望可以帮到你··

apsx文件

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestGvsSelectInCode2.aspx.cs" Inherits="Test8_TestGvsSelectInCode2" %>

<!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>
<form id="form1" runat="server">
<div>
<asp:GridView ID="gvShowData" AllowPaging=True PageSize=2 runat="server" AllowSorting=True AutoGenerateColumns="False" OnSorting="gvShowData_Sorting" OnPageIndexChanging="gvShowData_PageIndexChanging" >

<Columns>

<asp:BoundField DataField="stuId" HeaderText="stuId" InsertVisible="False" ReadOnly="True"
SortExpression="stuId" />
<asp:BoundField DataField="stuName" HeaderText="stuName" SortExpression="stuName" />
<asp:BoundField DataField="stuNo" HeaderText="stuNo" SortExpression="stuNo" />
<asp:CheckBoxField DataField="stuSex" HeaderText="stuSex" SortExpression="stuSex" />
<asp:BoundField DataField="stuAge" HeaderText="stuAge" SortExpression="stuAge" />
<asp:BoundField DataField="stuSeat" HeaderText="stuSeat" SortExpression="stuSeat" />

<asp:BoundField DataField="stuAddress" HeaderText="stuAddress" SortExpression="stuAddress" />
<asp:BoundField DataField="stuName" HeaderText="stuName" SortExpression="stuName" />
<asp:CheckBoxField />
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>

aspx.cs文件

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.Common;
using System.Collections.Generic;
using System.Configuration;
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;

/// <summary>
/// FactoryAdo 的摘要说明
/// </summary>
///
public static class FactoryAdo
{
public static DbConnection GetConnection()
{
ConnectionStringSettings cts = ConfigurationManager.ConnectionStrings["dbTestConnectionString"];
DbConnection conn = new SqlConnection(cts.ConnectionString);
return conn;
}

public static DbCommand GetCommand()
{
DbCommand command = new SqlCommand();
return command;
}

public static DbDataAdapter GetAdapter()
{
DbDataAdapter adpter = new SqlDataAdapter();
return adpter;
}

public static SqlDataSource GetSqlDataSource()
{
ConnectionStringSettings cts = ConfigurationManager.ConnectionStrings["dbTestConnectionString"];
SqlDataSource dataSource = new SqlDataSource();
dataSource.ConnectionString = cts.ConnectionString;
return dataSource;
}
}


public static class FactoryDbParameter
{
public static DbParameter GetParameter(string paraName)
{
DbParameter parameter = new SqlParameter();
parameter.ParameterName = paraName;
return parameter;
}
public static DbParameter GetParameter(string paraName, DbType type, object value)
{
DbParameter parameter = new SqlParameter();
parameter.ParameterName = paraName;
parameter.DbType = type;
parameter.Value = value;
return parameter;
}
}
wzy_love_sly 2008-05-13
  • 打赏
  • 举报
回复
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" PageSize="2" AllowSorting="True" OnSorting="GridView1_Sorting">
<Columns>
<asp:BoundField DataField="id" SortExpression="id" HeaderText = "编号" />
<asp:BoundField DataField="name" SortExpression="name" HeaderText = "编号" />
<asp:BoundField DataField="birth" SortExpression="birth" HeaderText = "编号" />

</Columns>
</asp:GridView>

</div>
</form>
</body>
</html>
Aderlee 2008-05-13
  • 打赏
  • 举报
回复
基本思路:在Page_Load里初始化
ViewState["排序"] = 排序字段;
ViewState["順序"] = asc/desc;
在Sorting裡面变换上面的两个ViewState,之后执行绑定即可。
DataTable dt = 拿数据;
DataView dv = dt.DefaultView;
dv.Sort = ViewState["排序"] + ViewState["順序"];
GridView1.DataSource = dv;
GridView1.DataBind();
rodking 2008-05-13
  • 打赏
  • 举报
回复
基本思路是在sql语句中预留个order by [column],然后根据界面上点击的列来确定 [column],然后再sorting事件中重新加载下数据
dengyi425 2008-05-13
  • 打赏
  • 举报
回复
你直接在查询语句中加上一句group by 不就得了.干嘛一定要以经取得数据后在GV中排序呢?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧