关于试用GirdView排序的问题

灰太狼已不再单身 2009-04-09 12:34:58
我用的gridview分页功能实现了,但是排序还不行哦,大家看看怎么搞?》

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1" PageSize="5" Height="301px" Width="439px"
DataKeyNames="balance" AllowSorting="true" OnSorting="GridView1_Sorting">
<Columns>
<asp:BoundField DataField="Id" HeaderText="编号" SortExpression="Id" />
<asp:TemplateField HeaderText="用户名" SortExpression="UserName">
<ItemTemplate>
<a href="gd_showuserinfo.aspx?username=<%# Eval("username") %>"><%# Eval("username") %></a>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="TrueName" HeaderText="真实姓名" SortExpression="TrueName" />
<asp:BoundField DataField="Provinces" HeaderText="所在省市" SortExpression="Provinces" />
<asp:TemplateField HeaderText="账户余额" SortExpression="Balance">
<ItemTemplate>
<a href="gd_showbalance.aspx?username=<%# Eval("UserName") %>"><%# Eval("Balance")%></a>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="会员等级" SortExpression="MemberGrade">
<ItemTemplate>
<a href="gd_showmembergrade.aspx?UserName=<%# Eval("UserName") %>"><%# Eval("MemberGrade")%></a>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<PagerTemplate>
<asp:LinkButton CommandName="Page" CommandArgument="First" ID="btnFirst" runat="server" ><< 首页</asp:LinkButton>
<asp:LinkButton CommandName="Page" CommandArgument="Prev" ID="btnPrev" runat="server">< 上一页</asp:LinkButton>
[当前<%= GridView1.PageIndex * GridView1.PageSize+1 %> - <%= GridView1.PageIndex * GridView1.PageSize + GridView1.PageSize%>]
<asp:LinkButton CommandName="Page" CommandArgument="Next" ID="BtnNext" runat="server" >下一页 ></asp:LinkButton>
<asp:LinkButton CommandName="Page" CommandArgument="Last" ID="btnLast" runat="server">末页 >></asp:LinkButton>
</PagerTemplate>
</asp:GridView>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetAllUsers"
TypeName="GraduationProject.BLL.UserManager"></asp:ObjectDataSource>


下面是后台的代码:

protected void Page_Load(object sender, EventArgs e)
{
ViewState["sortColumn"]= "balance";
ViewState["sortDirection"]= "ASC";
}
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
this.GridView1.EditIndex = -1;
//判断viewstate中的排序字段,在这之前要在page_load里初始化ViewState["sortColumn"]与ViewState["sortDirection"]
if (ViewState["sortColumn"].ToString() == e.SortExpression.ToString())
{
if ("ASC" == ViewState["sortDirection"].ToString())
{
ViewState["sortDirection"]= "DESC";
}
else
{
ViewState["sortDirection"]= "ASC";
}

}
else
{
ViewState["sortColumn"]= e.SortExpression.ToString();
ViewState["sortDirection"]= "ASC";
}

}
...全文
241 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
cgp2008 2011-07-22
  • 打赏
  • 举报
回复
看一下 怎么搞
  • 打赏
  • 举报
回复
注意我用的是 三层里面的数据方法来绑定的 不是用的dataset
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetAllUsers"
TypeName="GraduationProject.BLL.UserManager"></asp:ObjectDataSource>

所以我点击排序的时候,就出错误了

数据源“ObjectDataSource1”不支持 IEnumerable 数据的排序。只对 DataView、DataTable 和 DataSet 支持自动排序。
zzxap 2009-04-09
  • 打赏
  • 举报
回复
http://www.svnhost.cn/Download/Detail-335.shtml
http://download.csdn.net/source/1068761
zzxap 2009-04-09
  • 打赏
  • 举报
回复
http://www.cnblogs.com/villison/archive/2007/09/10/888160.html
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lonelySurvive 的回复:]
问题已经说得很清楚了
数据源“ObjectDataSource1”不支持 IEnumerable 数据的排序。只对 DataView、DataTable 和 DataSet 支持自动排序。
所以解决方法我认为可以有两种

第一是在GetAllUsers方法底下返回dataTable
你以前是把数据封装到实体类里面,你不封装直接得数据就可以了

第二是不用objectDateSource,改用LinqDataSource
使用LinqDataSource连排序的代码都不用写了

参考


C# code
Stutent[] s…
[/Quote]

我的数据是直接从数据库读出来的,不想手动去写,试试你的第一种行不行吧
ssgtyh005 2009-04-09
  • 打赏
  • 举报
回复
关注!
lonelySurvive 2009-04-09
  • 打赏
  • 举报
回复
问题已经说得很清楚了
数据源“ObjectDataSource1”不支持 IEnumerable 数据的排序。只对 DataView、DataTable 和 DataSet 支持自动排序。
所以解决方法我认为可以有两种

第一是在GetAllUsers方法底下返回dataTable
你以前是把数据封装到实体类里面,你不封装直接得数据就可以了

第二是不用objectDateSource,改用LinqDataSource
使用LinqDataSource连排序的代码都不用写了

参考


Stutent[] students;
protected void Page_Load(object sender, EventArgs e)
{
students = new Stutent[]{
new Stutent("shaka",22,"男"),
new Stutent("shaka",12,"男"),
new Stutent("romeo",34,"男"),
new Stutent("rose",45,"女"),
new Stutent("ruby",67,"女"),
new Stutent("kevin",23,"男"),
new Stutent("jordan",22,"男")
};
}
protected void LinqDataSource1_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
e.Result = students;
}



不管你封装的是泛型或者数组都可以
gongsun 2009-04-09
  • 打赏
  • 举报
回复
up
dd__dd 2009-04-09
  • 打赏
  • 举报
回复
数据源类型不支持排序,你可以转换一下类型
sxmonsy 2009-04-09
  • 打赏
  • 举报
回复
为什么不能用DataSet
insus 2009-04-09
  • 打赏
  • 举报
回复
feifeiyiwen 2009-04-09
  • 打赏
  • 举报
回复
up
  • 打赏
  • 举报
回复
在线等哦 来人帮解决下……

为什么我点击下一页后顺序又变为了原来默认的顺序了呢?

还有就是为什么只能点击两次排序呢?3次以后的点击就没效果了
zhxhdean 2009-04-09
  • 打赏
  • 举报
回复
是个问题,关注下。
  • 打赏
  • 举报
回复
还有个问题就是 我点击表头 只能点击两次排序 后面点击就没变化了 怎么修改?
  • 打赏
  • 举报
回复

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;
using GraduationProject.BLL;
public partial class Admin_gd_showuser : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.GridView1.DataSource = UserManager.GetAllUsers();
this.GridView1.DataBind();
ViewState["sortColumn"] = "balance";
ViewState["sortDirection"] = "DESC";
}
}

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
this.GridView1.EditIndex = -1;
//判断viewstate中的排序字段,在这之前要在page_load里初始化ViewState["sortColumn"]与ViewState["sortDirection"]
if (ViewState["sortColumn"].ToString() == e.SortExpression.ToString())
{
if ("ASC" == ViewState["sortDirection"].ToString())
{
ViewState["sortDirection"] = "DESC";
}
else
{
ViewState["sortDirection"] = "ASC";
}
this.GridView1.DataSource = UserManager.GetAllUsersByStr(ViewState["sortColumn"].ToString(), ViewState["sortDirection"].ToString());
this.GridView1.DataBind();
}
else
{
ViewState["sortColumn"] = e.SortExpression.ToString();
ViewState["sortDirection"] = "ASC";
this.GridView1.DataSource = UserManager.GetAllUsersByStr(ViewState["sortColumn"].ToString(), ViewState["sortDirection"].ToString());
this.GridView1.DataBind();
}

}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
this.GridView1.PageIndex = e.NewPageIndex;
this.GridView1.DataSource = UserManager.GetAllUsers();
this.GridView1.DataBind();
}
}


我后台改成这样的代码就可以排序了,但是点击下一页,它又变回了原来的顺序……
wuyq11 2009-04-09
  • 打赏
  • 举报
回复

62,268

社区成员

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

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

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

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