2011-10-07 6 views
7

mio SortedAscendingHeaderStyle e SortedDescendingHeaderStyle non funziona a tutti iASP.NET GridView SortedAscendingHeaderStyle non funziona

<asp:GridView ID="grdProducts" runat="server" CssClass="grid" AllowPaging="True" AllowSorting="True" PageSize="100" EmptyDataText="No data to show" 
       onrowdatabound="grdProducts_RowDataBound" onrowediting="grdProducts_RowEditing" onsorting="grdProducts_Sorting" AutoGenerateEditButton="True"> 
    <AlternatingRowStyle CssClass="even" /> 
    <SortedAscendingHeaderStyle ForeColor="White" CssClass="sorted" /> 
    <SortedDescendingHeaderStyle CssClass="sorted desc" /> 
</asp:GridView> 

righe sono allineati correttamente quando le intestazioni sono cliccato, ma quando ho ispezionare l'intestazione utilizzando Firebug, mostra solo: (questo è quando filtrate ascendente)

<th scope="col"> 
    <a href="javascript:__doPostBack('ctl00$body$ctl00$grdProducts','Sort$Namekey')">Namekey</a> 
</th> 

ForeColor e CssClass siano fissati a tutti.

Qualcuno ha idea di cosa sto facendo male?

EDIT: Il mio codice C# dietro

protected void grdProducts_Sorting(object sender, GridViewSortEventArgs e) 
    { 
    if ((string)ViewState["SortColumn"] == e.SortExpression) 
     ViewState["SortDirection"] = ((string)ViewState["SortDirection"] == "") ? " DESC" : ""; 
    else 
    { 
     ViewState["SortColumn"] = e.SortExpression; 
     ViewState["SortDirection"] = ""; 
    } 
    } 

    protected override void OnPreRender(EventArgs e) 
    { 
    BindGrid(); 
    base.OnPreRender(e); 
    } 

    private void BindGrid() 
    { 
    string query = "SELECT ... ORDER BY " + ViewState["SortColumn"] + ViewState["SortDirection"]; 

    DataTable dt = SqlFunctions.Select(query); 
    grdProducts.DataSource = dt; 
    grdProducts.DataBind(); 
    } 
+0

Domanda sciocca, cosa succede se esegui un aggiornamento completo Ctl + F5? –

+0

Firefox chiede se voglio "Reinvia", l'ho fatto clic, quindi la colonna è ancora ordinata e l'intestazione non ha ancora classe/stile. – Aximili

risposta

13

io non sono sicuro se SortedDescendingHeaderStyle opere senza codice, se non si sta utilizzando un asp:SQLDataSource come origine dati GridView. Ma un po 'di codice può portarti lì.

È necessario applicare manualmente lo stile CSS alla cella dell'intestazione. Puoi farlo nell'evento Sorting.

+0

Grazie Jim. Ho finito per usare DataTable (http://datatables.net/) – Aximili

+0

Non funziona :-(Quando chiamo gridview.DataBind(), CSS scompare – machj

0

penso che sia il momento della vostra associazione dati. Cambia la tua associazione dati a lavorare in questo modo:

protected void Page_Load(object sender, EventArgs e) 
    {  
    if (!Page.IsPostBack) 
    { 
     BindGrid();  
    } 
    } 

    protected void grdProducts_Sorting(object sender, GridViewSortEventArgs e) 
    { 
    if ((string)ViewState["SortColumn"] == e.SortExpression) 
     ViewState["SortDirection"] = ((string)ViewState["SortDirection"] == "") ? " DESC" : ""; 
    else 
    { 
     ViewState["SortColumn"] = e.SortExpression; 
     ViewState["SortDirection"] = ""; 
    } 
    BindGrid(); 
    } 

GridView.Sorting Event

+0

Grazie, Rick! Ma ancora non funziona :( – Aximili

5

Non ho abbastanza rappresentante per commentare la risposta accettata. Quando ho provato ad applicare la soluzione, sarebbe stata ordinata correttamente, ma non ho applicato la classe CSS a ciò che è stato reso.

Nel mio caso, invocare DataBind() sulla mia griglia DOPO l'ordinamento del mio DataSource (List) e assegnarlo come DataSource della griglia, ma PRIMA di impostare CssClass ha fatto il trucco. Ho pensato di condividere nel caso in cui qualcun altro avesse riscontrato qualcosa di simile.

+0

Vuoi dire che nel gestore di eventi '_Sorting' hai chiamato' DataBind() 'e poi hai assegnato il' CssClass' alle proprietà di ordinamento asc/desc dell'ordinamento? Sto cercando di usare gli stili, ma non sembrano da applicare a tutti – ajeh

+0

La soluzione funziona Il processo dovrebbe essere 1) assegnare l'origine dati ordinata alla griglia; 2) chiamare DataBind(); 3) Assegna la classe crescente/decrescente a CssClass alla cella della riga di intestazione della colonna ordinata. Questa soluzione non sta usando – ajeh