gridview 点击表头实现排序

long312268543 2008-07-08 09:08:46
girdview里面绑定了数据库里面的值:
序号 姓名 性别 年龄
1 aaaa 男 20
2 bbbb 男 21
3 cccc 女 18
4 dddd 男 40
我想实现的功能就是点击girdivew表头,比如点击年龄表头,点击一次实现降序,再次点击实现升序的功能。
请问这个要怎么实现?
...全文
5801 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
Big富 2011-05-14
  • 打赏
  • 举报
回复
呵呵,C#和VB的都有,我只看C#的哦
kozz09 2011-01-17
  • 打赏
  • 举报
回复
kankan
mengjixinglove 2010-10-12
  • 打赏
  • 举报
回复
Protected Overloads Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
Me.grdContent.Attributes.Add("SortExpression", "QuotationID")
Me.grdContent.Attributes.Add("SortDirection", "DESC")
ViewState("SortExpression") = "QuotationID"
ViewState("SortDirection") = SortDirection.Descending
GetData()
End If
End Sub
Protected Sub grdContent_Sorting(ByVal serder As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles grdContent.Sorting
If iSortCount = 0 Then
Dim sortExpression As String = e.SortExpression.ToString()
Dim sortDirection As String = "DESC"
If sortExpression = grdContent.Attributes("SortExpression") Then
sortDirection = IIf(grdContent.Attributes("SortDirection").ToString = sortDirection, "ASC", "DESC")
End If
grdContent.Attributes("SortExpression") = sortExpression
grdContent.Attributes("SortDirection") = sortDirection
ViewState("SortExpression") = sortExpression
ViewState("SortDirection") = sortDirection
textSort.Text = CStr(CInt(textSort.Text) + 1).ToString()
GetData()
iSortCount += 1
End If
End Sub

Protected Sub grdContent_RowCreated(ByVal serder As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles grdContent.RowCreated
If e.Row.RowType = DataControlRowType.Header Then
Dim sortColumnIndex As Integer = GetSortColumnIdex()
If sortColumnIndex <> -1 Then
AddSortImage(sortColumnIndex, e.Row) '
End If
End If
End Sub

Private Function GetSortColumnIdex() As Integer
For Each field As DataControlField In grdContent.Columns
If field.SortExpression = ViewState("SortExpression").ToString().Trim() Then
Return grdContent.Columns.IndexOf(field)
End If
Next
Return -1
End Function

Private Sub AddSortImage(ByVal columnIndex As Integer, ByVal headerRow As GridViewRow) '
Dim lblsort As New Label()
Dim sortDirection As String = "DESC"
sortDirection = IIf(grdContent.Attributes("SortDirection").ToString = sortDirection, "ASC", "DESC")
If sortDirection = "ASC" Then
lblsort.Text = "<font color='red'>▲</font>"
Else
lblsort.Text = "<font color='red'>▼</font>"
End If
headerRow.Cells(columnIndex).Controls.Add(lblsort)
End Sub
kaixin945 2010-01-18
  • 打赏
  • 举报
回复
SortCommand
Michael_MJ 2008-10-23
  • 打赏
  • 举报
回复
如果不想用ViewState呢?
long312268543 2008-07-08
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 namhyuk 的回复:]
引用 17 楼 Magic_YJL 的回复:
引用 15 楼 namhyuk 的回复:
是不是我理解问题有障碍,这个问题用得着这么复杂的回复吗?

我的很复杂吗?

说不复杂你才高兴?为什么一个点点鼠标的事儿,给初学者那么多迷惑呢?
[/Quote]

我觉得他的方法很好,比较容易懂,对我来说足够了。以后有时间就慢慢的学更好的方法。
初学者只要先弄懂逻辑就上手比较容易。
yizhilaoshu2 2008-07-08
  • 打赏
  • 举报
回复
namhyuk 2008-07-08
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 Magic_YJL 的回复:]
引用 15 楼 namhyuk 的回复:
是不是我理解问题有障碍,这个问题用得着这么复杂的回复吗?

我的很复杂吗?
[/Quote]
说不复杂你才高兴?为什么一个点点鼠标的事儿,给初学者那么多迷惑呢?
Magic_YJL 2008-07-08
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 namhyuk 的回复:]
是不是我理解问题有障碍,这个问题用得着这么复杂的回复吗?
[/Quote]
我的很复杂吗?
满衣兄 2008-07-08
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 namhyuk 的回复:]
是不是我理解问题有障碍,这个问题用得着这么复杂的回复吗?
[/Quote]

namhyuk 2008-07-08
  • 打赏
  • 举报
回复
是不是我理解问题有障碍,这个问题用得着这么复杂的回复吗?
Magic_YJL 2008-07-08
  • 打赏
  • 举报
回复
做了个简单的例子,供楼主参考一下
前台代码:

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

<!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="GridView1" runat="server" AutoGenerateColumns="false" AllowSorting="true" OnSorting="GridView1_Sorting">
<Columns>
<asp:BoundField SortExpression="OrderId" DataField="OrderId" HeaderText="定单编号"/>
<asp:BoundField SortExpression="CustomerId" DataField="CustomerId" HeaderText="客户编号"/>
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>


后台代码:

using System;
using System.Data;
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;
using System.Data.SqlClient;

public partial class _Default : System.Web.UI.Page
{
public const string CONNSTR = "Server=.;Database=NorthWind;UID=sa";
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{

if (ViewState["SortField"] == null || ViewState["SortField"].ToString() != "")
ViewState["SortField"] = "OrderId";
DataBind(ViewState["SortField"].ToString());
}

}

public void DataBind(string sortField)
{
string strSql = "SELECT TOP 30 OrderId,CustomerId FROM Orders";
using (SqlConnection conn = new SqlConnection(CONNSTR))
{
conn.Open();
SqlDataAdapter adt = new SqlDataAdapter(strSql, conn);
DataSet ds = new DataSet();
adt.Fill(ds);
DataView dvw = ds.Tables[0].DefaultView;
if (!string.IsNullOrEmpty(sortField))
dvw.Sort = sortField;
this.GridView1.DataSource = dvw.Table;
this.GridView1.DataBind();
}
}

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
if (ViewState["SortField"].ToString() == e.SortExpression)
ViewState["SortField"] += " DESC";
else
ViewState["SortField"] = e.SortExpression;
DataBind(ViewState["SortField"].ToString());
}
}



这里并没有用你提供的数据库,我懒的建了哈
用的是MSSQL自带的NorthWind数据库,如果你用的是MSSQL那就最好了,可以直接运行
shinlgienls 2008-07-08
  • 打赏
  • 举报
回复

1、需要知道你怎么绑定的数据源,建议采用sql分段财讯
2、再这个时间里写 SortCommand
leon28 2008-07-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhouyongli41 的回复:]
gridview是直接点击右上角那小三角,把排序打勾就可以了
[/Quote]
满衣兄 2008-07-08
  • 打赏
  • 举报
回复
楼主,这个问题很容易啊
http://www.baidu.com/s?wd=gridview+%C5%C5%D0%F2&lm=0&si=&rn=10&ie=gb2312&ct=0&cl=3&f=12
搜索一下就来了,当年我也遇到排序不会,结果一搜索,照葫芦画瓢就OK了.
xiaoqiuwyh 2008-07-08
  • 打赏
  • 举报
回复
直接设置girdview的有一个属性AllowSorting的值为true,就可以实现点击表头排序了
周公 2008-07-08
  • 打赏
  • 举报
回复
下面的代码示例演示在定义了 Columns 集合时如何使用 AllowSorting 属性在 GridView 控件中启用排序。还会以编程方式向正在排序的列的标题中添加一个图像以指示排序方向。若要此示例工作,您必须提供自己的图像。

<%@ Page language="C#" %>

<script runat="server">

void CustomersGridView_RowCreated(Object sender, GridViewRowEventArgs e)
{

// Use the RowType property to determine whether the
// row being created is the header row.
if (e.Row.RowType == DataControlRowType.Header)
{
// Call the GetSortColumnIndex helper method to determine
// the index of the column being sorted.
int sortColumnIndex = GetSortColumnIndex();

if (sortColumnIndex != -1)
{
// Call the AddSortImage helper method to add
// a sort direction image to the appropriate
// column header.
AddSortImage(sortColumnIndex, e.Row);
}
}
}

// This is a helper method used to determine the index of the
// column being sorted. If no column is being sorted, -1 is returned.
int GetSortColumnIndex()
{

// Iterate through the Columns collection to determine the index
// of the column being sorted.
foreach (DataControlField field in CustomersGridView.Columns)
{
if (field.SortExpression == CustomersGridView.SortExpression)
{
return CustomersGridView.Columns.IndexOf(field);
}
}

return -1;
}

// 这个方法是用来设置排序的图片
void AddSortImage(int columnIndex, GridViewRow headerRow)
{

// 设置排序图片,如果是降序则设置列头为降序图片,否则设置为升序图片
Image sortImage = new Image();
if (CustomersGridView.SortDirection == SortDirection.Ascending)
{
sortImage.ImageUrl = "~/Images/Ascending.jpg";
sortImage.AlternateText = "Ascending Order";
}
else
{
sortImage.ImageUrl = "~/Images/Descending.jpg";
sortImage.AlternateText = "Descending Order";
}

// 在列头添加排序图片
headerRow.Cells[columnIndex].Controls.Add(sortImage);

}

</script>

<html>
<body>
<form runat="server">

<h3>GridView AllowSorting Example</h3>

<asp:gridview id="CustomersGridView"
datasourceid="CustomersSource"
autogeneratecolumns="false"
emptydatatext="No data available."
allowsorting="true"
onrowcreated="CustomersGridView_RowCreated"
runat="server">

<columns>
<asp:boundfield datafield="CustomerID"
headertext="Customer ID"
headerstyle-wrap="false"
sortexpression="CustomerID"/>
<asp:boundfield datafield="CompanyName"
headertext="CompanyName"
headerstyle-wrap="false"
sortexpression="CompanyName"/>
<asp:boundfield datafield="Address"
headertext="Address"
headerstyle-wrap="false"
sortexpression="Address"/>
<asp:boundfield datafield="City"
headertext="City"
headerstyle-wrap="false"
sortexpression="City"/>
<asp:boundfield datafield="PostalCode"
headertext="Postal Code"
headerstyle-wrap="false"
sortexpression="PostalCode" />
<asp:boundfield datafield="Country"
headertext="Country"
headerstyle-wrap="false"
sortexpression="Country"/>
</columns>

</asp:gridview>

<!-- 连接到Northwind数据库-->
<!-- 从Web.config读取数据库连接字符串信息. -->
<asp:sqldatasource id="CustomersSource"
selectcommand="Select [CustomerID], [CompanyName], [Address], [City], [PostalCode], [Country] From [Customers]"
connectionstring="<%$ ConnectionStrings:NorthWindConnectionString%>"
runat="server"/>

</form>
</body>
</html>
PrewinZZZ 2008-07-08
  • 打赏
  • 举报
回复
排序的话它自带的都有。
Maxlusune 2008-07-08
  • 打赏
  • 举报
回复
在girdivew设置这两属性 onsorting="Grid_Sorting" AllowSorting="true"
cs 代码
load 里加默认排序字段
ViewState["orderby"] = "字段名";
ViewState["asc"] = "asc";
public void Grid_Sorting(object sender, GridViewSortEventArgs e)
{
spage = e.SortExpression;
if (ViewState["orderby"].ToString() == spage)
{
if (ViewState["asc"].ToString() == "desc")
{
ViewState["asc"] = "asc";
}
else
{
ViewState["asc"] = "desc";
}
}
else
{
ViewState["orderby"] = e.SortExpression;

}
BindGrid(pager.PageIndex, pager.PageSize);
}
万小萌 2008-07-08
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20070917/15/aa6b59bd-7c36-41b9-9915-09ce19d2a1a4.html 请看这个
加载更多回复(5)

62,074

社区成员

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

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

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

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