为什么控件点击表头排序后,点击下一页排序就无效了呢?为什么排序只能点击两次呢?多点几次(只点击一列的表头)就不能排序了呢>?应该改改哪里的代码??……
<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();
}
<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();
}
{
this.GridView1.PageIndex = e.NewPageIndex; //控制下一页
this.GridView1.DataSource = UserManager.GetAllUsers();
this.GridView1.DataBind();
}你直接调用这个方法取出数据,怎么取出保存的排序信息?
因为这里的绑定的和GridView1_Sorting里面绑定的不同
{
this.GridView1.PageIndex = e.NewPageIndex; //控制下一页
this.GridView1.DataSource = UserManager.GetAllUsersByStr(ViewState["sortColumn"].ToString(), ViewState["sortDirection"].ToString());
this.GridView1.DataBind();
}
我晕 我就怎么没想到这样解决呢
我以为下面不能用 ViewState["sortColumn"] 晕死
还剩一个问题了 就是点击表头排序 只能点击两次 多了就不行了 为什么?怎么改?
this.GridView1.PageIndex = e.NewPageIndex; //控制下一页
this.GridView1.DataSource = UserManager.GetAllUsers();
this.GridView1.DataBind();
这样就应该能实现你说的分页功能!!
当然,是有自带的分页功能,但是用了排序或者回调,就要出问题的,因为我用了<asp:TemplateField>所以没办法,我就用了这种方法来控制现在就还剩一个问题了 就是点击表头排序 只能点击两次 多了就不行了 为什么?怎么改?
{
ViewState["sortDirection"] = "DESC";
}
else
{
ViewState["sortDirection"] = "DESC"; // asc ba?
}
我晕,难怪我一直看下面个 DESC不顺眼 ,原来真的是那个的原因
我一直都没改,晕死,因为那时我的翻页有问题,就没注意它了
这里做多一个IF就可以
{
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();
} }
还差一个判断