ASP.NET - Controlli 3
ASP.NET
Liste
Tipi di liste
- ListBox (selezione singola/multipla).
- DropDownList (selezione singola).
- RadioButtonList (selezione singola).
- CheckBoxList (selezione multipla).
- BulletedList (nessuna selezione, tre sottotipi: ‘Text’, ‘HyperLink’, ‘LinkButton’).
- Tutti questi controlli sono ereditati dalla classe ‘ListControl’ e:
- Sono collezioni di oggetti ‘ListItem’.
- Gli elementi possono essere aggiunti sia dall’ambiente di progettazione che dall’ambiente di esecuzione.
- Supportano il databinding, quindi si interfacciano da file XML o da database.
- Ecco come si presentano.
ListBox
- Consente la selezione singola o multipla degli elementi.
DropDownList
- Consente la selezione singola di un elemento.
RadioButtonList
- Consente la selezione singola di un elemento.
CheckBoxList
- Consente la selezione multipla degli elementi.
BulletedList
- Non consente la selezione degli elementi.
- Gli elementi possono essere di tipo ‘Text’ (semplice testo), ‘HyperLink’ (link a pagine web), ‘LinkButton’ (bottoni sotto forma di link).
Aggiunta di elementi
- Aggiungere elementi in fase di progettazione (da codice HTML).
- Esempio con una DropDownList.
<asp:DropDownList ID="ddl1" runat="server" Width="150px">
<asp:ListItem Text="Red" Value="1" />
<asp:ListItem Text="Green" Value="2" />
<asp:ListItem Text="Blu" Value="3" />
</asp:DropDownList>
- Aggiungere elementi in fase di esecuzione (per esempio nell’evento ‘Page_Load()’:
ddl1.Items.Add(new ListItem("Red", "1"));
ddl1.Items.Add(new ListItem("Green", "2"));
ddl1.Items.Add(new ListItem("Blue", "3"));
- Aggiungere un elemento in una determinata posizione:
// Aggiunge l'elemento '(Selezionare)' in prima posizione.
ListItem li = new ListItem("(Selezionare)", "-1");
ddl1.Items.Insert(0, li);
Selezione di un elemento
- Se il tipo di lista lo permette, si possono selezionare uno o più elementi in questo modo.
- La proprietà ‘Selected’ è anche disponibile in ambiente di progettazione.
// Prima alternativa.
ddl1.Items[2].Selected = true;
// Seconda alternativa.
ddl1.SelectedIndex = 2;
- Se nessun elemento è selezionato, allora ‘SelectedIndex’ è uguale a -1, mentre ‘SelectedValue’ è uguale alla stringa nulla.
- Per ricavare i dati dell’elemento selezionato:
// SelectedIndex è a base 0.
// SelectedIndex = -1 se nessun elemento è selezionato.
Response.Write("SelectedIndex: " + ddl1.SelectedIndex + "<br />");
Response.Write("SelectedValue: " + ddl1.SelectedValue + "<br />");
// Controllare sempre che SelectedItem sia diverso da null.
if (ddl1.SelectedItem != null)
{
Response.Write("SelectedItem.Text: " + ddl1.SelectedItem.Text + "<br />");
Response.Write("SelectedItem.Value: " + ddl1.SelectedItem.Value + "<br />");
}
Selezionare o deselezionare tutti gli elementi
- L’esempio si applica alle liste che permettono la selezione multipla degli elementi.
foreach (ListItem li in cbl1.Items)
{
li.Selected = true; // Selezionare
li.Selected = false; // Deselezionare
}
Visibilità e abilitazione degli elementi
- Si possono nascondere o disabiltare uno o più elementi, dipende dal tipo di lista (disponibile anche in fase di progettazione):
ddl1.Items[2].Enabled = false;
Binding con file XML
- Esempio con una DropDownList, ma valido anche per gli altri tipi di liste.
- Una lista può essere caricata da un file XML tramite un ‘DataSet’.
- Sia dato il seguente file XML (file ‘Colors.xml’) incluso nel progetto nella cartella principale.
<?xml version="1.0" encoding="utf-8" ?>
<Colors>
<Color>
<ColorId>1</ColorId>
<ColorName>Red</ColorName>
</Color>
<Color>
<ColorId>2</ColorId>
<ColorName>Green</ColorName>
</Color>
<Color>
<ColorId>3</ColorId>
<ColorName>Blue</ColorName>
</Color>
</Colors>
- Per caricare la DropDownList basta allora aggiungere il seguente codice per esempio nel Form_Load():
// Necessita di 'using System.Data'.
DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("~/Colors.xml"));
ddl1.DataTextField = "ColorName";
ddl1.DataValueField = "ColorId";
ddl1.DataSource = ds;
ddl1.DataBind();
Binding con database MySql
- Esempio con una DropDownList, ma valido anche per gli altri tipi di liste.
- Una DropDownList può essere caricata da una tabella in un database MySql.
- Nei Riferimenti del progetto bisogna aggiungere il riferimento alla dll di connessione verso il MySql ‘MySql.Data’.
- Sia dato il database MySql con la tabella ‘colors’ contenente i campi ‘ColorId’ e ‘ColorName’ con le seguenti righe di esempio.
- Nel file ‘Web.config’, nella sezione ‘<configuration>’ deve essere presente la sezione ‘<connectionStrings>’ così fatta (si deve ovviamente modificare lo UserId e la Password con i valori opportuni):
<connectionStrings>
<add name="MYCONN"
connectionString="server=127.0.0.1;User Id=xxx;password=yyy;database=test;"
providerName="MySql.Data.MySqlClient" />
</connectionStrings>
- Per caricare la DropDownList basta allora aggiungere il seguente codice per esempio nel Form_Load():
// Necessita di 'using System.Configuration'.
string connString = ConfigurationManager.ConnectionStrings["MYCONN"].ConnectionString;
// Necessita di 'using MySql.Data.MySqlClient'.
using (MySqlConnection conn = new MySqlConnection(connString))
{
MySqlCommand cmd = new MySqlCommand("SELECT ColorId, ColorName
FROM test.colors
ORDER BY ColorId", conn);
conn.Open();
ddl1.DataTextField = "ColorName";
ddl1.DataValueField = "ColorId";
ddl1.DataSource = cmd.ExecuteReader();
ddl1.DataBind();
conn.Close();
}
Numero di righe da visualizzare
- Si applica alle ListBox.
- Per impostare il numero di righe visualizzate (oltre le quali è mostrata una barra di scorrimento):
Rows="2"
Selezione singola o multipla
- Si applica alle ListBox.
SelectionMode="Multiple"
Disposizione in orizzontale o in verticale
- Si applica alle CheckBoxList e alle RadioButtonList.
- Per disporre le CheckBox in orizzontale o in verticale:
RepeatDirection="Horizontal"
RepeatDirection="Vertical"
- Impostare su quante colonne disporre le CheckBox:
RepeatColumns="2"
Tipi di BulletedList
- Si applica alle BulletedList.
- Per impostare lo style degli elementi (ce ne sono tanti):
BulletStyle="Numbered"
- Per liste numeriche si può impostare il primo numero della lista:
- Gli elementi della lista possono essere Text, HyperLink o LinkButton:
DisplayMode="Text"
DisplayMode="HyperLink"
DisplayMode="LinkButton"
- Se gli elementi sono HyperLink, l’URL va impostato nella proprietà ‘Value’; impostare opportunamente anche la proprietà ‘Target’ per aprire il link sulla stessa finestra o su una nuova finestra.
Value="http://www.google.com"
Target="_blank"
- Se gli elementi sono LinkButton, l’evento ‘Click()’ permette di riconoscere da quale elemento è stato fatto il click.
protected void bl1_Click(object sender, BulletedListEventArgs e)
{
ListItem li = bl1.Items[e.Index];
Response.Write("Text: " + li.Text + "<br />");
Response.Write("Value: " + li.Value + "<br />");
Response.Write("Index: " + e.Index.ToString() + "<br />");
}