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.
Quindi create un metodo void doe andrete a scirvere il tutto; il mio:
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();
}
}
La connessione è creata usando la stringa impostata nel Web.config e richiamata attraverso SqlConnection.
Dopo aver aperto la connessione istanziamo un SqlDataAdapter che corrisponde a un insieme di comando utili per riempire un DataSet.
Con queste due righe noi riempiamo il nostro DataSet
DataSet ds = new DataSet();
adapter.Fill(ds);
che altro non è che una rappresentazione dei dati.
Il DataView è una rappresentazione personalizzata dei dati; in verità non ne parlo qua perchè dovrei parlare del metodo che uso per fare il sorting ma è un pò troppo lungo e sarà argomento dei prossimi giorni.
Comunque tutte queste righe
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();
rappresentano le propietà della nostra GV.
Poi dovete richiamare questo metodo nel Page_Load:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
decoderViewSource();
}
}
Come detto prima questa non funzionerà per tutti in quanto io uso un sorting e un paging personalizzati; ma come anticipato sarà argomento dei prossimi giorni con altri due articoli grazie ai quali avrete una GV completa di tutto.
Rcordatevi di mettere AutoGenerateColumns a false sennò genererà le colonne da solo.
Il SelectButton è una colonna in più con scritto select cliccabile che consente di selezionare una riga; in genere serve se usate anche un FormView o un DetailsView.
CssClass corrisponde a una regole CSS impostata nel folgio di stile (nel mio caso associata alla MasterPage).
c# asp.net gridview dataset dataview databind
Commentami!