GridView sorting in C#

Mattepuffo's logo
GridView sorting in C#

GridView sorting in C#

Ed eccoci all'ultima parte dei tre articoli dedicati alla GV da code-behind (qui i primi due articoli: primo, secondo).

Qua vi parlo dell'implementazione del meccanismo di sorting.

Se si vuole usare il code-behind per la GV non basta attivare il sorting, ma bisogna scrivere il metodo a mano.

Prima di tutto dobbiamo fare alcune modifiche alla GV che adesso richiede due parametri:

protected void decoderViewSource(string sortExpr, string sortDir)
{

SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["MYDB"].ConnectionString);
String queryString = "SELECT * FROM siti";
try
{
conn.Open();
SqlDataAdapter adapter = new SqlDataAdapter(queryString, conn);
DataSet ds = new DataSet();
adapter.Fill(ds);
DataView dv = new DataView();
dv = ds.Tables[0].DefaultView;
if (sortExpr != string.Empty)
{
dv.Sort = string.Format("{0} {1}", sortExpr, sortDir);
}
DecoderView.DataSource = dv;
DecoderView.AutoGenerateColumns = false;
DecoderView.AutoGenerateSelectButton = true;
DecoderView.AllowSorting = true;
DecoderView.AllowPaging = true;
DecoderView.CssClass = "grid";
DecoderView.PageSize = int.Parse(ddlPagine.SelectedValue);
DecoderView.PagerSettings.Visible = false;
DecoderView.DataBind();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
conn.Close();
}
}

L'unica differenza sta nei due parametri string.

 

A questo punto dobbiamo creare il metodo di sorting:

protected void decoderViewSorting(object sender, GridViewSortEventArgs e)
{
decoderViewSource(e.SortExpression, sortOrder);
}

 

public string sortOrder
{
get
{
if (ViewState["sortOrder"].ToString() == "desc")
{
ViewState["sortOrder"] = "asc";
}
else
{
ViewState["sortOrder"] = "desc";
}

return ViewState["sortOrder"].ToString();
}
set
{
ViewState["sortOrder"] = value;
}
}

Nel primo metodo si richiama il metodo di riempimento della GV impostando il sorting richiamando il metodo sotto.

Con questo metodo manipoliamo la proprietà ViewState della GV, che serve appunto per impostare le proprietà di visualizzazione.

A questo punto dobbiamo fare ancora due piccole modifiche.

La prima riiguarda il Page_Load:

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ViewState["sortOrder"] = "";
decoderViewSource("", "");
}
}

Si deve aggiungere la riga ViewState e modificare il metodo decoderViewSource che adesso richiede due parametri.

L'altra modifica riguarda la GV sulla pagina:

<asp:GridView ID="DecoderView" runat="server" DataKeyNames="sito#" OnSorting="decoderViewSorting">

In pratica aggiungiamo l'evento OnSorting richiamando uno dei metodi impostati sopra.

 

Spero di non essermi dimenticato nulla!


Condividi

Commentami!