gridview控件里面为什么点击下一页排序就无效了呢?

灰太狼已不再单身 2009-04-09 04:21:16
为什么控件点击表头排序后,点击下一页排序就无效了呢?

为什么排序只能点击两次呢?多点几次(只点击一列的表头)就不能排序了呢>?

应该改改哪里的代码??……


<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" PageSize="5" Height="301px" Width="439px"
DataKeyNames="balance" AllowSorting="true" OnSorting="GridView1_Sorting" OnPageIndexChanging="GridView1_PageIndexChanging">
<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>



protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.GridView1.DataSource = UserManager.GetAllUsers();
this.GridView1.DataBind();
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"] = "DESC";
}
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();
}


...全文
419 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
jian980518 2010-01-08
  • 打赏
  • 举报
回复
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"] = "DESC";
}
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();
}

}
还差一个判断
jian980518 2010-01-08
  • 打赏
  • 举报
回复
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
这里做多一个IF就可以
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 cc19851 的回复:]
引用 9 楼 lifueng 的回复:
引用 8 楼 cc19851 的回复:
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
this.GridView1.PageIndex = e.NewPageIndex; //控制下一页
this.GridView1.DataSource = UserManager.GetAllUsersByStr(ViewState["sortColumn"].ToString(), ViewState["sortDirection"].ToString());
this.GridView1.DataBind();
}


我晕 我就怎么没想到这样…
[/Quote]

我晕,难怪我一直看下面个 DESC不顺眼 ,原来真的是那个的原因
我一直都没改,晕死,因为那时我的翻页有问题,就没注意它了
cc19851 2009-04-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lifueng 的回复:]
引用 8 楼 cc19851 的回复:
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
this.GridView1.PageIndex = e.NewPageIndex;  //控制下一页
this.GridView1.DataSource = UserManager.GetAllUsersByStr(ViewState["sortColumn"].ToString(), ViewState["sortDirection"].ToString());
this.GridView1.DataBind();
}


我晕 我就怎么没想到这样解决呢
我以为下面不能用 ViewState…
[/Quote]
if ("ASC" == ViewState["sortDirection"].ToString())
{
ViewState["sortDirection"] = "DESC";
}
else
{
ViewState["sortDirection"] = "DESC"; // asc ba?
}
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 tianshikuqi8 的回复:]
楼主,GridView不是自带启用分页,还有启用排序吗!为什么不用那个!如果用其自带的启用分页的话
this.GridView1.PageIndex = e.NewPageIndex; //控制下一页
this.GridView1.DataSource = UserManager.GetAllUsers();
this.GridView1.DataBind();
这样就应该能实现你说的分页功能!!
[/Quote]

当然,是有自带的分页功能,但是用了排序或者回调,就要出问题的,因为我用了<asp:TemplateField>

所以没办法,我就用了这种方法来控制

现在就还剩一个问题了 就是点击表头排序 只能点击两次 多了就不行了 为什么?怎么改?
jdbcodbc 2009-04-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 tianshikuqi8 的回复:]
楼主,GridView不是自带启用分页,还有启用排序吗!为什么不用那个!如果用其自带的启用分页的话
this.GridView1.PageIndex = e.NewPageIndex; //控制下一页
this.GridView1.DataSource = UserManager.GetAllUsers();
this.GridView1.DataBind();
这样就应该能实现你说的分页功能!!
[/Quote]

正解
辰爸 2009-04-09
  • 打赏
  • 举报
回复
楼主,GridView不是自带启用分页,还有启用排序吗!为什么不用那个!如果用其自带的启用分页的话
this.GridView1.PageIndex = e.NewPageIndex; //控制下一页
this.GridView1.DataSource = UserManager.GetAllUsers();
this.GridView1.DataBind();
这样就应该能实现你说的分页功能!!
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 cc19851 的回复:]
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
this.GridView1.PageIndex = e.NewPageIndex; //控制下一页
this.GridView1.DataSource = UserManager.GetAllUsersByStr(ViewState["sortColumn"].ToString(), ViewState["sortDirection"].ToString());
this.GridView1.DataBind();
}
[/Quote]

我晕 我就怎么没想到这样解决呢
我以为下面不能用 ViewState["sortColumn"] 晕死


还剩一个问题了 就是点击表头排序 只能点击两次 多了就不行了 为什么?怎么改?
cc19851 2009-04-09
  • 打赏
  • 举报
回复
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
this.GridView1.PageIndex = e.NewPageIndex; //控制下一页
this.GridView1.DataSource = UserManager.GetAllUsersByStr(ViewState["sortColumn"].ToString(), ViewState["sortDirection"].ToString());
this.GridView1.DataBind();
}
  • 打赏
  • 举报
回复
是不同 那么具体应该怎么做呢 有人给点建议 或者 代码吗?
niuniuhuang 2009-04-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sohighthesky 的回复:]
C# codeprotected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
this.GridView1.PageIndex = e.NewPageIndex; //控制下一页
this.GridView1.DataSource = UserManager.GetAllUsers();
this.GridView1.DataBind();
}



你直接调用这个方法取出数据,怎么取出保存的排序信息?
[/Quote]
因为这里的绑定的和GridView1_Sorting里面绑定的不同
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sohighthesky 的回复:]
C# codeprotected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
this.GridView1.PageIndex = e.NewPageIndex; //控制下一页
this.GridView1.DataSource = UserManager.GetAllUsers();
this.GridView1.DataBind();
}



你直接调用这个方法取出数据,怎么取出保存的排序信息?
[/Quote]

我读取数据是用的三层结构的,那么我翻页后保存上一页的数据,那不是要改变搜索条件了?还是怎么的……

我暂时没想出来怎么写
fuzijing 2009-04-09
  • 打赏
  • 举报
回复
......
sohighthesky 2009-04-09
  • 打赏
  • 举报
回复
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
this.GridView1.PageIndex = e.NewPageIndex; //控制下一页
this.GridView1.DataSource = UserManager.GetAllUsers();
this.GridView1.DataBind();
}

你直接调用这个方法取出数据,怎么取出保存的排序信息?
cyz9977 2009-04-09
  • 打赏
  • 举报
回复
你就斷點 慢慢找~~
  • 打赏
  • 举报
回复
我觉得我的后台代码哪里有问题 但是自己还没找出来

62,046

社区成员

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

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

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

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