2010-08-26 4 views
1

J'ai un contrôle GridView sur ma page. GV n'utilise aucun contrôle .net en tant que source de données pour lier des données. Je fais ceci dans le code derrière où je crée mon propre DataTable et DataSet. Ensuite, je lie ce DataSet à GV. Ensuite, je voudrais activer le tri des colonnes. Le problème est que cela ne fonctionne pas comme il se doit lorsque vous n'utilisez aucun contrôle de source de données prédéfini. Vous devez écrire du code. Bud je ne sais pas quel code, comment trier GV après que l'utilisateur clique sur heder? Les lignes doivent ensuite être triées par les données de cette colonne. Et comment trier et trier en cliquant sur le même lien?Tri dans gridview sans aucun contrôle de liaison de données - comment le faire?

Répondre

2

Définir AllowSorting = True et gérer l'événement de tri. Dans l'événement de tri, vous pouvez basculer entre sort direction si l'expression de tri est la même (c'est-à-dire que vous cliquez de nouveau sur le même en-tête de colonne). Voir article this pour un démarrage rapide.

1

Voici quelques extraits que j'ai utilisés. C'est bien quand le 3: cliquez sur le même en-tête supprime le tri sur cette colonne et favorise également les colonnes d'un ordre de tri inférieur, que le sortexpression supprimé, à un ordre de tri plus élevé, tel que here et 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 
Questions connexes