2009-10-09 6 views
0

Salut, j'ai une vue de la grille dans ce que j'affiche quelques colonnes appelées le nom, le téléphone, l'information et la date. Mon exigence est si je clique sur les colonnes d'en-tête, il doit être triée, mon code ASPX est ici ...tri par quadrillage basé sur les colonnes

<asp:GridView ID="sorttest" runat="server" AllowSorting="true"> 
    <Columns> 
     <asp:BoundField DataField="ID" HeaderText="Sno." Visible="False" /> 
     <asp:BoundField DataField="Name" HeaderStyle-CssClass="tdHead3" HeaderText="Name" SortExpression="Name" /> 
     <asp:BoundField DataField="Phone" HeaderStyle-CssClass="tdHead3" HeaderText="Phone Number" SortExpression="Phone"/> 
     <asp:BoundField DataField="Information" HeaderStyle-CssClass="tdHead3" HeaderText="Information Of The Offender" SortExpression="Information"/> 
     <asp:BoundField DataField="Date" HeaderStyle-CssClass="tdHead3" HeaderText="Date of Graffiti" SortExpression="Date"/> 
    </Columns> 
</asp:GridView> 

et mon code est:

Public Sub FillGrid() 
    Try 
     myconnection = New SqlConnection(conntection string) 
     cmd = New SqlCommand() 
     cmd.CommandText = "Retrievedetails" 
     cmd.CommandType = CommandType.StoredProcedure 
     cmd.Connection = myconnection 
     ds = New DataSet() 
     da = New SqlDataAdapter(cmd) 
     da.Fill(ds, "details") 
     myconnection.Open() 
     sorttest.DataSource = ds 
     sorttest.DataBind() 
    Catch ex As Exception 
    Finally 
     myconnection.Close() 
    End Try 
End Sub 

pour cela si je clique sur l'en-tête de la colonne il devrait trier d'abord en ordre croissant si je clique la prochaine fois alors il devrait trier dans l'ordre décroissant il s'appliquerait pour toutes les colonnes énumérées dans la grille ...

aidez-moi s'il vous plaît dans coder pour ceci ...

Répondre

1

Vous devez gérer l'événement OnSorting, voici comment je le fais:

ASPX:

<asp:GridView ID="sorttest" runat="server" AllowSorting="true" 
    OnSorting="SortGrid"> 

CodeBehind:

//sorry I'm putting my CS code, as translating it to VB will be 
//very tedious for me 
protected void SortGrid(object sender, GridViewSortEventArgs e) 
{ 
    ViewState["SortDirection"] = 
      (e.SortDirection == SortDirection.Ascending) ? "asc": "desc"; 

    ViewState["SortExp"] = e.SortExpression; 

    FillGrid();//CALL FILL GRID 
} 

maintenant FillGrid vous devez trier le tableau (détails) que vous obtenez en fonction de ces valeurs:

'Here sort the table (details) based on values stored in View State 
    'Sorry My VB skills are really rusty now :) 

    var dv as DataView = ds.Tables("details").DefaultView; 

    if not (ViewState("SortExp") is nothing) then 'check for null 
     if ViewState("SortDirection").ToString() == "asc" then 
      dv.Sort = ViewState("SortExp") & " " & "asc" 
     else 
      dv.Sort = ViewState("SortExp") & " " & "desc" 
     end if 
    end if 

    sorttest.DataSource = dv 'bind to dataview 
    sorttest.DataBind() 
1

Ceci est le code dans vb.net. Vous devez gérer l'événement Sorting pour GridView et vous devez également conserver l'état d'affichage pour le tri précédent.

Private Property PreviousSortField() As String 
    Get 
     If ViewState("SortField") Is Nothing Then 
      Return "" 
     Else 
      Return ViewState("SortField") 
     End If 
    End Get 
    Set(ByVal value As String) 
     ViewState("SortField") = value 
    End Set 
End Property 

Private Property PreviousSortDirection() As String 
    Get 
     If ViewState("SortDirection") Is Nothing Then 
      Return "" 
     Else 
      Return ViewState("SortDirection") 
     End If 
    End Get 
    Set(ByVal value As String) 
     ViewState("SortDirection") = value 
    End Set 
End Property 

Protected Sub sorttest_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles sorttest.Sorting 
    Dim SortDirection As String 
    If e.SortDirection = WebControls.SortDirection.Ascending Then 
     SortDirection = "DESC" 
    ElseIf e.SortDirection = WebControls.SortDirection.Descending Then 
     SortDirection = "ASC" 
    Else 
     SortDirection = "ASC" 
    End If 
    Dim ds As DataSet = sender.Datasource 
    Dim Data As DataTable = ds.Tables(0) 
    If Not Data Is Nothing Then 
     Dim dv As DataView = New DataView(Data) 
     If e.SortExpression = PreviousSortField And SortDirection = PreviousSortDirection Then 
      If SortDirection.ToUpper = "ASC" Then 
       SortDirection = "DESC" 
      ElseIf SortDirection.ToUpper = "DESC" Then 
       SortDirection = "ASC" 
      Else 
       SortDirection = "ASC" 
      End If 
     End If 
     dv.Sort = e.SortExpression & " " & SortDirection 
     sender.DataSource = dv 
     sender.DataBind() 
    End If 

    'Need to store sort info in view state 
    PreviousSortField = e.SortExpression 
    PreviousSortDirection = SortDirection 
End Sub