2012-10-03 8 views
5

Attualmente sto lavorando su un codice che si occupa di ordinare e dati di paging in una griglia. Ora sto cercando di implementare la freccia di ordinamento (frecce su/giù accanto alle intestazioni delle colonne) ma non ho avuto successo. Il codice per implementare le frecce di ordinamento si trova nella routine secondaria * GridView1_RowCreated *. In questo momento, quando eseguo il codice, non vedo affatto le frecce di ordinamento. La riga problematica è la seguente: "If tblAdministrators.SortExpression = lnk.CommandArgument Quindi" Non riesco a capire cosa c'è che non va in quella linea. È sempre False pertanto le frecce non vengono visualizzate.Gridview che ordina la freccia su/giù nelle intestazioni di colonna

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 

codice ASPX:

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

risposta

4

Date un'occhiata a mio campione:

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

Prestare attenzione sulla SortedAscendingHeaderStyle e SortedDescendingHeaderStyle. Basta creare classi css appropriate con l'immagine di sfondo (freccia su e freccia giù) e il gioco è fatto.

+0

Gregor. Funzionerà solo quando si utilizza un SQLDataSource che non è il mio caso. Sarebbe davvero bello se funzionasse dal momento che è così facile da implementare. –

+0

Questo è solo un esempio di origine dati. Dovrebbe funzionare anche su qualsiasi altro tipo di origine dati. –

+0

Il "DataSourceID" è obbligatorio per utilizzare queste funzioni (SortedAscendingHeaderStyle ecc.) Nel mio codice, non sto utilizzando un controllo dell'origine dati, ma sto piuttosto facendo un collegamento manuale. –

0

al fine di aggiungere una freccia di ordinamento in una griglia di dati su un VB.net Windows Form, non hanno nemmeno bisogno di scrivere alcun codice

  1. Sul modulo in modalità progettazione - selezionare la griglia si è lavorare con, fare clic con il tasto destro del mouse su Proprietà, impostare Modalità selezione = Cella Selezionare
  2. Sul modulo in modalità Progettazione - fare clic sulla freccia sulla griglia a destra in alto, per modificare le proprietà della colonna, selezionare modificare o aggiungere colonne, impostare SortMode = Automatic
  3. Se si dispone del codice per il contenuto della cella (ad esempio si desidera che l'utente apra un altro modulo facendo clic su qualsiasi riga nella griglia di dati), utilizzare CellDouble Fare clic sulla proprietà per gestire l'evento. Se l'avete utilizzato solo click allora sarà ordinare l'intestazione e anche aprire il modulo per la cella data

Private Sub _CellDoubleClick (mittente come oggetto, e come DataGridViewCellEventArgs) Maniglie DGAcctGrpList.CellDoubleClick

Problemi correlati