【问题标题】:Sorting within gridview without any data binding control - how to do it?在没有任何数据绑定控件的情况下在 gridview 中排序 - 怎么做?
【发布时间】:2010-08-26 08:59:03
【问题描述】:

我的页面上有一个 GridView 控件。 GV 不使用任何 .net 控件作为数据源来绑定数据。我在创建自己的 DataTable 和 DataSet 的代码中执行此操作。然后我将此数据集绑定到 GV。 接下来我想启用排序列。问题是,当您不使用任何预定义的数据源控件时,这将无法正常工作。你必须写一些代码。不知道是什么代码,用户点击heder后如何对GV进行排序?然后应按此列中的数据对行进行排序。以及如何通过点击同一个链接实现升序和降序?

【问题讨论】:

    标签: .net asp.net .net-3.5 gridview aspxgridview


    【解决方案1】:

    设置 AllowSorting=True 并处理 Sorting 事件。在排序事件中,如果排序表达式相同(即您再次单击相同的列标题),您可以切换sort direction。请参阅this 文章了解快速入门。

    【讨论】:

      【解决方案2】:

      这是我用过的一些 sn-ps。当第 3 次单击同一标题删除该列上的排序并且还将排序顺序比删除的排序表达式低的列提升为较高排序顺序时,这很好,例如 herehere

        Protected Sub SortLinkBtn_Click(ByVal sender As Object, ByVal e As System.EventArgs)
      
           Dim gv As GridView = CType(sender.parent.parent.parent.parent, GridView)
           Call UpdateTabPanelProgressSpinner(gv)
           Dim dv As New DataView
           dv = gv.DataSource
      
           Call BuildSortExprTable("sort" + gv.ID, sender.commandname)
           dv.Sort = CurrSortExpressions("sort" + gv.ID)
           gv.DataSource = dv
           gv.DataBind()
        End Sub
      
      Protected Function BuildSortExprTable(ByVal vsName As String, ByVal vsKey As String) As Dictionary(Of String, String)
        Dim SortTable As Dictionary(Of String, String)
        SortTable = IIf(ViewState(vsName) Is Nothing, New Dictionary(Of String, String), CType(ViewState(vsName), Dictionary(Of String, String)))
        If SortTable.Count = 0 Then
           SortTable.Add(vsKey, " ASC")
        Else
      
           If SortTable.ContainsKey(vsKey) Then
              Select Case SortTable(vsKey).ToString
                 Case " ASC"
                    SortTable(vsKey) = " DESC"
                 Case " DESC"
                    SortTable.Remove(vsKey)
              End Select
           Else
              SortTable.Add(vsKey, " ASC")
           End If
        End If
      
        ViewState.Add(vsName, SortTable)
      
        Return SortTable
        End Function
      
      Protected Function CurrSortExpressions(ByVal vsName As String) As String
        Dim SortTable As Dictionary(Of String, String)
      
        SortTable = IIf(ViewState(vsName) Is Nothing, New Dictionary(Of String, String), CType(ViewState(vsName), Dictionary(Of String, String)))
        Dim sSorts As String = String.Empty
        Dim key As Object
        For Each key In SortTable.Keys
           sSorts += ", " + key.ToString() + " " + SortTable(key).ToString()
        Next
        'remove first ", "
        If sSorts = "" Then
           'nada
        Else
           sSorts = Right(sSorts, sSorts.Length - 2)
        End If
        Return sSorts
        End Function
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-11
        • 2017-02-10
        • 2022-09-28
        • 2012-01-23
        • 2012-09-30
        • 1970-01-01
        • 2013-09-18
        相关资源
        最近更新 更多