我正在尝试在网格上应用排序,但在页面加载时需要两次单击来对数据进行排序。所以当页面加载时。 首先点击任意列) - >没有排序,但我看到页面刷新
任何列上的第二次点击将对数据进行排序。然后,一旦再次重新加载页面,它将适用于任意数量的点击。
.aspx的:
<asp:GridView id="SubGrid" runat="server" AutoGenerateColumns="False"
CellPadding="15" AllowPaging="True" PageSize="20" AllowSorting="True"
EmptyDataText="There are now submission to display."
ShowHeaderWhenEmpty="True" DataKeyNames="SubmissionID,Abstract,info,upload,finalized,Submitter"
OnRowCreated="SubGrid_RowCreated" OnRowDataBound="SubGrid_RowDataBound" DataSourceID="SqlDataSource1">
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionStringTest %>" SelectCommand="sb_Getvelue" SelectCommandType="StoredProcedure">
<SelectParameters>
代码背后:
在代码背后我有两个方法
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
Protected Sub SubGrid_RowCreated(sender As Object, e As GridViewRowEventArgs)
----Some Custom Code to add a extra line on top of the grid.
End Sub
Protected Sub SubGrid_RowDataBound(sender As Object, e As
GridViewRowEventArgs)
----- Some code to add tool tip ----
End Sub
答案 0 :(得分:0)
我在C#中遇到了类似的问题,我不确定VB的等价物,不确定它是否有帮助,但检查页面加载中的回发。
我必须添加Page_Load
if(!IsPostBack)
一旦我添加了这个,后续调用就会首先点击。
希望它有所帮助。
答案 1 :(得分:0)
我找到了这个问题的解决方案。这是我的思想和逻辑。如果我错了,请告诉我。
数据与SqlDataSource绑定,我的SelectCommandType是存储过程。我的存储过程返回已按ID排序的结果(这是我的第一列)。现在我发现排序在第一次尝试“ID”列时对所有列都很好。此外,当我点击列来排序数据myGrid.SortExpression alwasy返回空白值。所以我认为网格已经按照ASC顺序通过存储过程按ID排序,当我第一次点击ID列时,它再次按ASC顺序对网格进行排序,因为它未初始化并且排序顺序为空白。
所以我在page_load
中添加了这段代码If IsPostBack = False Then
If String.IsNullOrEmpty(myGrid.SortExpression) Then
myGrid.Sort("SubmissionID", SortDirection.Ascending)
End If
End If
这将在页面加载时以ASC顺序初始化网格,现在当我第一次单击ID列时,它按DESC顺序对网格进行排序。所以在页面加载时初始化网格排序顺序对我有用。