asp网格需要两次点击才能对数据进行排序

时间:2017-06-28 15:52:00

标签: asp.net sorting gridview datagrid

我正在尝试在网格上应用排序,但在页面加载时需要两次单击来对数据进行排序。所以当页面加载时。 首先点击任意列) - >没有排序,但我看到页面刷新

任何列上的

第二次点击将对数据进行排序。然后,一旦再次重新加载页面,它将适用于任意数量的点击。

.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

2 个答案:

答案 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顺序对网格进行排序。所以在页面加载时初始化网格排序顺序对我有用。