Ciao, osservando alcuni esempi relativi alla paginazione in un grid view e al relativo ordinamento ho provato a mettere in pratica quanto imparato... ma ho bisogno del vostro aiuto

Ho un problema con il bind:

se cambio pagina, non viene gestito correttamente l'ordinamento
se imposto un filtro, non viene gestito correttamente l'ordinamento
se sono in una pagina successiva il bind non è corretto

da alcune prove ho capito che il problema è nel bind ma non so come risolverlo per gesire:

paginazione
filro
ordinamento

usando la logica sotto indicata


ho già provato a spostare il BindGrid(); nel postback ma se funziona una cosa, smette di funzionare l'altra (parlo di paginazione, filro, ordinamento )

Graaaaaaaazie!


protected void Page_Load(object sender, EventArgs e)
{
msnHelper = MsnHelper.MsnHelperFactory();
OpenSqlConnection();

BindGrid();

if (!this.Page.IsPostBack)
{


}
}

private void BindGrid()
{
DataSet dsElenco;
dsElenco = msnHelper.DataHelper.GetDedede(sqlConnection);
if (dsElenco.Tables[0].Rows.Count > 0)
{
// Imposto il filtro presente nel ViewState
if (ViewState["LastFilter"] != null)
{
dsElenco.Tables[0].DefaultView.RowFilter = ViewState["LastFilter"].ToString();
}

gwEC.DataSource = dsElenco.Tables[0];
gwEC.DataBind();
}
}


protected void btnRicerca_Click(object sender, EventArgs e)
{
string RicercaNumero_Filter = tbRicercaNumero.Text;
string RicercaCliente_Filter = ddlRicercaCliente.SelectedValue;

string IDCliente_Filter = ddlRicercaCliente.SelectedValue;

StringBuilder sb = new StringBuilder();

if (RicercaNumero_Filter != "")
sb.AppendFormat("(NumeroEstrattoConto = {0})", RicercaNumero_Filter);

...

string s = sb.ToString();
ViewState["LastFilter"] = s; // persist filter on postback
BindGrid();
// ritorna alla prima pagina
gwEC.PageIndex = 0;
}


protected void gwEC_Sorting(object sender, GridViewSortEventArgs e)
{
GridViewSortExpression = e.SortExpression;
int pageIndex = gwEC.PageIndex;
gwEC.DataSource = SortDataTable(gwEC.DataSource as DataTable, false);
//BindGrid();
gwEC.DataBind();
gwEC.PageIndex = pageIndex;
}

protected void gwEC_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gwEC.DataSource = SortDataTable(gwEC.DataSource as DataTable, true);
gwEC.PageIndex = e.NewPageIndex;
//BindGrid();
gwEC.DataBind();
}