gridview

Mattepuffo's logo
Filtri GridView in Asp.NET e C#

Filtri GridView in Asp.NET e C#

GridView è uno controllo server molto comodo e molto utlizzato per rappresentare in maniera strutturata i dati presi da un database.

Hanno parecchie proprietà, ma gli manca la possibilità di filtrare i dati.

Oggi vi spiegao come ho fatto io per filtrare i dati attarverso una DropDownList.

In sostanza ho due DDL che fanno da filtro su una GV.

Tutti e tre prendono i dati da un ObjectDataSource e da metodi personalizzati.

Prima di tutto io ho aggiunto un nuovo progetto alla mia soluzione in modo da crare le varie classi/metodi personalizzati per interfacciarli al db, l'ho chiamato TNWB.

Qua dentro ho creato questa classe:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace TNWDB
{
public class Connection
{
private static SqlConnection conn = new SqlConnection("Data Source=10.0.5.131;Initial Catalog=TNW;Persist Security Info=True;User ID=user;Password=pass");

public static SqlConnection getConnection()
{
return conn;
}
}
}

Questa classe si occupa solo di istanziare la connessione.

Mattepuffo's logo
Selezionare tutte le CheckBox in C#

Selezionare tutte le CheckBox in C#

Tempo fa scrissi un articolo per far vedere com'era possibile integrare le CheckBox in una GridView.

Ovviamente possiamo volerle selezionare/deselezionare tutte in una botta.

Questo è possibile farlo abbastanza agilmente in Javascript; ma è possibile farlo anche in C#.

Vediamo come fare; supponendo di trovarci dentro una pagina Asp.NET con una GridView del genere:

<asp:Button ID="selectAll" runat="server" Text="Seleziona tutti" OnClick="btn_selectAll" />
<asp:Button ID="deselectAll" runat="server" Text="Deseleziona tutti" OnClick="btn_deselectAll" />
<asp:GridView ID="DecoderView" runat="server" DataKeyNames="sito#" DataSourceID="objDecoder"
AllowPaging="True" AllowSorting="True" AutoGenerateSelectButton="True" PageSize="5"
AutoGenerateColumns="False" CssClass="grid">
<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>

Come vedete sopra la GV ci sono due pulsanti che richiamano due eventi nel code-behind:

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.

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.