C# Gridview排序问题
我有一个启用排序的gridview:C# Gridview排序问题,c#,asp.net,vb.net,gridview,C#,Asp.net,Vb.net,Gridview,我有一个启用排序的gridview: <asp:GridView ID="grid1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" AllowSorting="true" OnSorting="grid1_Sorting"> <Columns> <asp:TemplateField HeaderText="Name" SortExpression="Name">
<asp:GridView ID="grid1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" AllowSorting="true" OnSorting="grid1_Sorting">
<Columns>
<asp:TemplateField HeaderText="Name" SortExpression="Name">
<ItemTemplate>
<asp:Label ID="NameLabel" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
C#
我读过很多文章,但大多数都是针对dataTable或使用Viewstate的。这给我的印象是,我错过了使上述工作正常进行的东西
我遇到的问题是,当我单击一列对其进行排序时,它同时经历了两种if条件(即升序和降序代码),但我不明白为什么?确定问题出现在aspx页面中。gridview具有OnSorting=“grid1\u排序”。删除此行可以解决此问题
我想我一定是复制了一些C代码并添加了那行代码。删除该行解决了问题,因为它导致GV排序两次。已知问题我已经读过,但正如我在文章中提到的,它针对datatable或使用Viewstate。您是否建议这是实现此目的的正确方法(在本例中使用Viewstate)?是的,您可以使用Viewstate来克服此问题。我已经更新了代码,但仍然存在相同的问题。我错过什么了吗?
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
ViewState("Order") = "DESC"
End If
End Sub
Protected Sub grid1_Sorting(sender As Object, e As GridViewSortEventArgs) Handles grid1.Sorting
Select Case e.SortExpression
Case "Name"
If ViewState("Order") = "DESC" Then
grid1.DataSource = DescData()
grid1.DataBind()
ViewState("Order") = "ASC"
Exit Select
Else
grid1.DataSource = AscData()
grid1.DataBind()
ViewState("SortOrder") = "DESC"
Exit Select
End If
End Select
protected void grid1_Sorting(object sender, GridViewSortEventArgs e)
{
switch (e.SortExpression) {
case "Name":
if (e.SortDirection == SortDirection.Ascending) {
grid1.DataSource = AscendingData();
grid1.DataBind();
e.SortDirection = SortDirection.Descending;
break;
} else {
grid1.DataSource = DescendingData();
grid1.DataBind();
e.SortDirection = SortDirection.Ascending;
break;
}
break;
}
}