2010-08-26 2 views
1

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

ответ

2

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

1

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

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