2012-10-03 5 views
5

Ich arbeite gerade an einem Code, der sich um das Sortieren und Paging von Daten in einer Gridview kümmert. Ich versuche jetzt, den Sortierpfeil zu implementieren (Pfeile nach oben/nach unten neben Spaltenüberschriften), aber ich habe keinen Erfolg. Der Code zum Implementieren der Sortierpfeile befindet sich in der Unterroutine * GridView1_RowCreated *. Gerade jetzt, wenn ich den Code ausführe, sehe ich die Sortierpfeile überhaupt nicht. Die problematische Zeile ist die folgende: "Wenn tblAdministrators.SortExpression = lnk.CommandArgument Dann" Ich kann nicht herausfinden, was mit dieser Zeile falsch ist. Es ist immer False daher die Pfeile nicht angezeigt.Gridview Sortierung Pfeil nach oben/unten in Spaltenüberschriften

Private Function GetData(sort As SortDirection) As Data.DataView 

    Dim connection As OracleDBConnect = DAL.GetOracleDBConnection() 
    Dim request As OracleDBRequest = Nothing 
    Dim result As OracleDBResult = Nothing 
    Dim trace As OracleDBChronoTrace = Nothing 
    Dim status As DBStatus 
    Dim sb As New StringBuilder 
    Dim dv As DataView 

    With sb 
     .Append("SELECT * FROM USERS") 
    End With 

    request = New OracleDBRequest(sb.ToString, CommandType.Text) 

    status = connection.Execute(request, result, trace) 

    dv = New DataView(result.DataSet.Tables(0)) 

    If (ViewState("sortExp") IsNot Nothing) Then 
     dv = New Data.DataView(result.DataSet.Tables(0)) 

     If (GridViewSortDirection = SortDirection.Ascending) Then 
      GridViewSortDirection = SortDirection.Descending 
      dv.Sort = CType(ViewState("sortExp").ToString() & DESCENDING, String) 
     Else 
      GridViewSortDirection = SortDirection.Ascending 
      dv.Sort = CType(ViewState("sortExp").ToString() & ASCENDING, String) 
     End If 
    Else 
     dv = result.DataSet.Tables(0).DefaultView 
    End If 

    Return dv 

End Function 


Public Property GridViewSortDirection() As SortDirection 
    Get 
     If ViewState("sortDir") Is Nothing Then 
      ViewState("sortDir") = SortDirection.Ascending 
     End If 

     Return CType(ViewState("sortDir"), SortDirection) 
    End Get 

    Set(ByVal value As SortDirection) 
     ViewState("sortDir") = value 
    End Set 

End Property 


Protected Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles tblAdministrators.PageIndexChanging 

    tblAdministrators.PageIndex = e.NewPageIndex 
    GridViewSortDirection = If(GridViewSortDirection = SortDirection.Descending, SortDirection.Ascending, SortDirection.Descending) 
    tblAdministrators.DataSource = GetData(GridViewSortDirection) 
    tblAdministrators.DataBind() 

End Sub 


Protected Sub GridView1_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles tblAdministrators.Sorting 

    ViewState("sortExp") = e.SortExpression 
    tblAdministrators.DataSource = GetData(GridViewSortDirection) 
    tblAdministrators.DataBind() 

End Sub 

Protected Sub GridView1_RowCreated(sender As Object, e As GridViewRowEventArgs) Handles tblAdministrators.RowCreated 
    If e.Row.RowType = DataControlRowType.Header Then 
     For Each tc As TableCell In e.Row.Cells 
      If tc.HasControls() Then 

       Dim lnk As LinkButton = DirectCast(tc.Controls(0), LinkButton) 
       If lnk IsNot Nothing Then 

        Dim img As New System.Web.UI.WebControls.Image() 

        img.ImageUrl = "/images/" & (If(GridViewSortDirection = SortDirection.Ascending, "asc", "desc")) & ".gif" 

        If tblAdministrators.SortExpression = lnk.CommandArgument Then 

         tc.Controls.Add(New LiteralControl(" ")) 
         tc.Controls.Add(img) 

        End If 
       End If 
      End If 
     Next 
    End If 
End Sub 

ASPX Code:

<asp:GridView ID="tblAdministrators" runat="server" AutoGenerateColumns="false" EmptyDataText="No records found" PageSize="25" AllowPaging="True" AllowSorting="True" OnRowCreated="GridView1_RowCreated"> 
     <Columns> 
      <asp:BoundField HeaderText="Name" DataField="Name" SortExpression="NAME"></asp:BoundField> 
     </Columns> 
     <Columns> 
      <asp:BoundField HeaderText="City" DataField="City" SortExpression="CITY"></asp:BoundField> 
     </Columns> 
    </asp:GridView> 

Antwort

4

einen Blick auf meine Probe nehmen:

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
    AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="CustomerId" 
    DataSourceID="SqlDataSource1"> 
    <SortedAscendingHeaderStyle CssClass="sortasc" /> 
    <SortedDescendingHeaderStyle CssClass="sortdesc" /> 
    <Columns> 
     <asp:CommandField ShowSelectButton="True" /> 
     <asp:BoundField DataField="CustomerId" HeaderText="CustomerId" 
      InsertVisible="False" ReadOnly="True" SortExpression="CustomerId" /> 
     <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" /> 
     <asp:BoundField DataField="IdNumber" HeaderText="IdNumber" 
      SortExpression="IdNumber" /> 
    </Columns> 
</asp:GridView> 

Achten Sie auf SortedAscendingHeaderStyle und SortedDescendingHeaderStyle. Erstellen Sie einfach geeignete CSS-Klassen mit Hintergrundbild (Pfeil nach oben und Pfeil nach unten) und Sie sind fertig.

+0

Gregor. Das funktioniert nur, wenn eine SQLDataSource verwendet wird, was nicht mein Fall ist. Es wäre wirklich toll, wenn es funktionieren würde, weil es so einfach zu implementieren ist. –

+0

Dies ist nur eine Beispiel-DataSource. Es sollte auch mit jedem anderen Datenquellentyp funktionieren. –

+0

Die "DataSourceID" ist obligatorisch, um diese Funktionen zu verwenden (SortedAscendingHeaderStyle etc ...) In meinem Code verwende ich kein Datenquellen-Steuerelement, aber ich mache eher eine manuelle Datenbindung. –

0

Um eine Sortierung Pfeil in einem Datenraster auf einer VB.net Windows Form hinzufügen, Sie haben nicht einmal einen Code

  1. auf Formular im Entwurfsmodus zu schreiben - wählen Sie das Raster Sie sind Klicken Sie mit der rechten Maustaste auf Eigenschaften, setzen Sie Selection Mode = Cell Select
  2. Auf Formular im Design-Modus - klicken Sie auf den Pfeil auf dem Gitter rechts oben, um Spalteneigenschaften zu bearbeiten, Spalten bearbeiten oder hinzufügen, SortMode = Automatic
  3. Wenn Sie Code für Ihren Zelleninhalt haben (z. B. möchten Sie, dass ein Benutzer ein anderes Formular öffnet, während er auf eine Zeile im Datenraster klickt), verwenden Sie CellDouble Klicken Sie auf Eigenschaft, um das Ereignis zu verarbeiten. Wenn die Sie einzigen Klick verwendet haben, dann wird es den Header sortieren und auch das Formular öffnen, für die gegebene Zelle

Private Sub _CellDoubleClick (Absender als Gegenstand, e As DataGridViewCellEventArgs) Griffe DGAcctGrpList.CellDoubleClick

Verwandte Themen