grid

Mattepuffo's logo
GridView con pager personalizzato

GridView con pager personalizzato

In questo articolo ho cominciato a parlarvi di come controllare una GridView da code-behind.

Come detto quell'articolo non è completo per due motivi:

  • il pager
  • il sorting

Qui vediamo come usare un pager personalizzato.

Prima di tutto vi riporto la GV:

protected void decoderViewSource()
{

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();
}
}

Mattepuffo's logo
Riempire GridView da code-behind in C#

Riempire GridView da code-behind in C#

Il controllo server GridView (GV) è uno dei controlli più utlizzati in ambito Asp.NET per rappresentare i dati in forma tabellare.

Volendo è possibile controllarla senza scrivere una riga di codice, ma qui vi spiegherò come fare scrivendo tutto a mano usando il C#.

Prima di tutto creiamo aggiungiamo una GV alla pagina; vi posto la mia:

<asp:GridView ID="DecoderView" runat="server" DataKeyNames="sito#">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="SelectedItem" AutoPostBack="true" runat="server" OnCheckedChanged="btn_check" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="sito#" HeaderText="sito#" SortExpression="sito#" InsertVisible="False" />
<asp:BoundField DataField="localita" HeaderText="localita" SortExpression="localita" />
<asp:BoundField DataField="descrizione" HeaderText="descrizione" SortExpression="descrizione" />
<asp:BoundField DataField="IP" HeaderText="IP" SortExpression="IP" />
<asp:BoundField DataField="riserva" HeaderText="riserva" SortExpression="riserva" />
<asp:BoundField DataField="Expr2" HeaderText="gruppo#" SortExpression="Expr2" />
<asp:BoundField DataField="Expr1" HeaderText="tipo_deploy#" SortExpression="Expr1" />
<asp:BoundField DataField="versione" HeaderText="versione" SortExpression="versione" />
<asp:BoundField DataField="versione_itl" HeaderText="versione_itl" SortExpression="versione_itl" />
<asp:BoundField DataField="ultimo_avvio" HeaderText="ultimo_avvio" SortExpression="ultimo_avvio" />
<asp:BoundField DataField="app_disk_space" HeaderText="app_disk_space" SortExpression="app_disk_space" />
<asp:BoundField DataField="TGU" HeaderText="TGU" SortExpression="TGU" />
<asp:BoundField DataField="ip_voyager" HeaderText="ip_voyager" SortExpression="ip_voyager" />
</Columns>
</asp:GridView>

L' uniche proprietà che ho impostato è il DataKeyNames che corrisponde alla Primary Key della mia tabella SQL Server.

Poi ho aggiunto a mano le colonne (i campi) da visualizzare; nel mio caso la prima colonna è una serie di CheckBox.

Le colonne che rappresentano i dati vengono controllate attraverso oggetti BoundField, nei quali dovete impostare il DataField (il nome del campo della tabella), l'HeaderText (l'inrtestazione della colonna nella GV) e la SortExpressione (in genere uguale al DataField).

Per quanto riguarda la pagina abbiamo finito; tutto il resto sarà fatto da code-behind.

Mattepuffo's logo
Sostituire valori GridView e DropDownList con voci Web.config

Sostituire valori GridView e DropDownList con voci Web.config

Lo scenario è questo: ho una GridView e una DropDownList che prendo dei valori da una tabella che ha solo valori numerici (2, 4, 6, ecc), dove ogni valore corrisponde a uno stato (pausa, da trasferire, ecc).

Gli stati non salvati da nessuna parte e io devo rappresentare gli stati al posto del valore perchè ovviamente più leggibili.

Ovviamente non posso modificare il database (sarebbe stato troppo facile).

I modi sono:

  • usare una query che ogni volta trasforma il numero in stato
  • cambiare i valori prendendoli da quelli impostati a mano nel Web.config

La prima strada è più facile ma ha degli svantaggi: se vengono cambiati gli stati devi cambiare la query; inoltre la query è anche più lenta.

Quindi ho proceduto col secondo metodo, e vi spigherò come ho fatto.

Prima di tutto dobbiamo aggiungere i nostri valori nel Web.config (il file di configurazione dei siti Asp.NET):

<appSettings>
<add key="0" value="DA PROCESSARE"/>
<add key="1" value="1 NON LO SO"/>
<add key="2" value="TRASFERITO"/>
<add key="3" value="ERRORE"/>
<add key="4" value="TRASFERITO"/>
<add key="6" value="6 NON LO SO"/>
<add key="7" value="7 NON LO SO"/>
<add key="30" value="PAUSA"/>
</appSettings>

Qui decidiamo ogni numero a che stato corrisponde.

Mattepuffo's logo
Checkbox dentro GridView in Asp.Net

Checkbox dentro GridView in Asp.Net

Il controllo server GridView è uno dei controlli più utilizzati nella creazione di pagine create in Asp.NET.

Visual Studio offre, poi, tante opzioni di personalizzazione così che è abbastanza facile imparare ad usare una GridView in poco tempo.

Però di default la GV è solo una "girglia" che rappresenta i dati in righe e colonne con molte più opzioni rispetto a una classica tabella.

Non offre ad esempio la possibilità di aggiungere DropDownList o CheckBox, a meno che non lo si fa a mano.

Nella guida vi spiego appunto come inserire una colonna CheckBox dentro a una GV.

Do per scontato che abbiate configurato la vostra GV; dovete fare però attenzione a impostare su false il parametro AutoGenerateColumns (che è condigliato a prescindere dall'argomento trattato).

Le colonne andranno inserite a mano dentro al tag <Columns>.

Dentro al suddetto tag andremmo a modificare il template attraverso TemplateField, che rappresenta un campo con contenuto personalizzato.

TemplateField permette di modificare diversi template a seconda dell'operazione che dobbiamo fare; noi useremo ItemTemplate imposta il modello per visualizzare un elemento in un controllo con associazione a dati.