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.

Sulla scia dell'articolo di questo, in cui spiego come riempire una JComboBox cone dati presi da db, ho deciso di scrivere una guida per la "gemella" DropDownList di Asp.NET.

Tenendo in considerazione che qua come db uso SQL Server e come linguaggio il C#.

Lo scenario però è lo stesso, quindi dategli una letta.

Riassumendo voglio rimepire la DDL con dati presi dalla tabella autori che ha solo due campi:

  • author_id (int)
  • author_name (string)

DropDownList è uno dei controll Web più utilizzati.

Da Visual Studio è facile riempirli, ma preferisco usare il code-behind.

La procedura però è molto più veloce in quanto il framework mette a disposizione i metodi per scegliere il valore della DDL e cosa viene rappresentato.

Prima di tutto aggiungiamo una DDL alla pagina:

<asp:DropDownList ID="ddlAuthor" runat="server">
</asp:DropDownList>

Sulla pagina non faremo nient'altro, quindi spostiamoci nel code-behind.

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.