1

ページに GridView コントロールがあります。GV は、データにバインドするためのデータ ソースとして .net コントロールを使用しません。私は独自の DataTable と DataSet を作成しているコード ビハインドでこれを行っています。次に、この DataSet を GV にバインドします。次に、列の並べ替えを有効にしたいと思います。問題は、定義済みのデータ ソース コントロールを使用しない場合、これが正常に機能しないことです。コードを書く必要があります。ユーザーがヘッダーをクリックした後に GV をソートする方法を教えてください。次に、この列内のデータで行をソートする必要があります。同じリンクをクリックして昇順と降順の並べ替えを有効にする方法は?

4

2 に答える 2

2

AllowSorting=True を設定し、Sorting イベントを処理します。並べ替えイベントでは、並べ替え式が同じ場合 (つまり、同じ列ヘッダーを再度クリックしている場合)、並べ替え方向を切り替えることができます。クイック スタートについては、この記事を参照してください。

于 2010-08-26T09:23:13.923 に答える
1

ここに私が使用したいくつかのスニペットがあります。同じヘッダーを 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
于 2010-08-26T13:37:56.473 に答える