Pagina personale di:
Carlo Vecchio
appunti di C#, R, SQL Server, ASP.NET, algoritmi, numeri
Vai ai contenuti

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="Disc"
   BulletStyle="Numbered"

  • Per liste numeriche si può impostare il primo numero della lista:

   FirstBulletNumber="2"

  • 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 />");
   }


© 2020 Carlo Vecchio
Torna ai contenuti