Ok, ti dico come farei.
Partiamo dalll'html. Bisogna attivare il sorting (allowsorting=true) del gridview e bisogna creare l'evento per il sorting: OnSorting="mioGridView_Sorting" (il metodo lo puoi chiamare come vuoi, basta che come parametri abbia quelli richiesti dal sorting, che vedremo lato server).
Alla CheckBoxField passiamo come SortExpression il nome del suo DataField + la direction DESC (descending, discendente)
Esempio. <asp:CheckBoxField DataField="Check" SortExpression="Check DESC" /> //Questo DataField è ovviamente il mio, creato per prova
Passiamo al lato server. Non so che DataSource usi per riempire la gridview, ma facciamo finta che sia un DataTable. Prima o dopo il binding del gridview ho ipotizzato 2 opzioni, sempre controllando che sia il primo accesso ( if(!isPostBack) ):
A runtime, per ogni riga attivo anche l'AutoPostback. E' fastidioso perchè selezionando un elemento ricarica ogni volta la pagina, ma così evito un javascript per avere sempre aggiornato il mio gridview:
protected void gv1_RowDataBound(object sender, GridViewRowEventArgs e)
{
GridViewRow gwr = (GridViewRow)e.Row;
if (gwr.RowType == DataControlRowType.DataRow)
{
DataControlFieldCell fc = (DataControlFieldCell)gwr.Cells[2];
CheckBox cb = (CheckBox)fc.Controls[0];
cb.Enabled = true;
cb.AutoPostBack = true;
}
}
Nell'evento Click del bottone lancio il sort:
Adesso registro l'evento sorting, che viene richiamato dal mio button. dentro recupero il mio datasource (da viewstate o da variabile statica)
Questo è quello che ho progettato. Vedi se ti può servire, per ora.
Ciao,
Paolo