Сортировка в gridview без какого-либо контроля привязки данных - как это сделать? - PullRequest
1 голос
/ 26 августа 2010

У меня есть элемент управления GridView на моей странице.GV не использует какой-либо элемент управления .net в качестве источника данных для привязки к данным.Я делаю это в коде, где я создаю свой собственный DataTable и DataSet.Затем я связываю этот набор данных с GV.Далее я бы хотел включить сортировку столбцов.Проблема в том, что это не работает так, как должно, если вы не используете какой-либо предопределенный элемент управления источником данных.Вы должны написать код.Bud Я не знаю, какой код, как сортировать GV после того, как пользователь нажимает хедер?Затем строки должны быть отсортированы по данным в этом столбце.А как изменить восходящую и нисходящую сортировку, нажав одну и ту же ссылку?

Ответы [ 2 ]

2 голосов
/ 26 августа 2010

Установите AllowSorting = True и обработайте событие сортировки. В событии сортировки вы можете переключать направление сортировки , если выражение сортировки совпадает (т.е. вы снова нажимаете на тот же заголовок столбца). См. эту статью для быстрого запуска.

1 голос
/ 26 августа 2010

Вот некоторые фрагменты, которые я использовал.Хорошо, когда 3-й щелчок по тому же заголовку удаляет сортировку в этом столбце, а также переводит столбцы более низкого сортировщика, чем удаленное сортировочное выражение, в более высокий сортировщик, например здесь и здесь .

  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
...