: settima puntata
Esempio funzionante | Sorgente | Scarica il sorgente (zip)
I List Controls sono dei controlli creati per agire sui dati. Sono utilizzati per visualizzare dati provenienti da collezioni e da database.
Anche se l’esempio che segue utilizza delle collezioni di dati fittizie per popolare i List Controls, il procedimento è il medesimo qualunque sia la sorgente dati a cui connettersi.
Una pagina con List Controls
Ecco alcuni List Controls:
Alcuni List Controls
Si tratta di ComboBox, CheckBox e Radio Buttons.
ASP.NET semplifica enormemente la costruzione del “legame” tra codice e dati, favorendo il più possibile la separazione tra codice e contenuto.
Analizziamo quindi il codice sorgente delle parti significative della pagina:
90 <div class="titolo">DropDownList Control</div>
91
92 <p>Selezionare una voce dall’elenco</p>
93
94 <asp:DropDownList id="frutti" runat="server">
95 <asp:ListItem value="Fr">Fragola</asp:ListItem>
96 <asp:ListItem value="La">Lampone</asp:ListItem>
97 <asp:ListItem value="Ci">Ciliegia</asp:ListItem>
98 </asp:DropDownList>
99
100 <br /><br />
101
102 <asp:Button id="button1" Text="Invia" OnClick="Button1_Click" runat="server"/>
Nel codice sopra riportato non è presente niente di eccezionale. È dichiarato un controllo di tipo DropDownList contenente alcuni controlli ListItem. Lo scopo è quello di realizzare una serie di tag di tipo select. Conclude il codice (riga 102) un pulsante per l’invio della selezione.
106 <div class="titolo">ListBox Control</div>
107
108 <p>Selezionare una voce dall’elenco</p>
109
110 <asp:ListBox id="artisti" rows="2" selectionmode="Multiple" runat="server">
111 <asp:ListItem value="Pi">Picasso</asp:ListItem>
112 <asp:ListItem value="Kl">Klee</asp:ListItem>
113 <asp:ListItem value="Mo">Modigliani</asp:ListItem>
114 </asp:ListBox>
115
116 <br /><br />
117
118 <asp:Button id="button2" Text="Invia" OnClick="Button2_Click" runat="server"/>
Qui è invece dichiarato un oggetto di tipo ListBox, molto simile al DropDownList, ma che presenta i dati su più righe. Notare la presenza dell’attributo selectionmode=”Multiple” che consente la selezione di più voci tenendo premuto il pulsante Ctrl.
Agire sui List Controls da codice
Se osserviamo con attenzione il codice e lo confrontiamo con il risultato a video, notiamo che:
- a video la DropDownList contiene un valore “Mango” non presente nel codice
- a video la ListBox contiene 3 artisti (Dalì, Magritte, Mirò) non presenti nel codice
Gli elementi mancanti sono stati aggiunti da codice, in particolare nell’evento Page_Load:
17 Sub Page_Load(sender as Object, e as EventArgs)
18
19 ‘Se il Mango non e’ gia’ presente, lo aggiungo
20 Dim lsiFrutto as New ListItem("Mango","Ma")
21 If Not frutti.Items.Contains(lsiFrutto) Then
22 frutti.Items.Add(lsiFrutto)
23 End If
24
25 ‘Aggiungo altri artisti
26 Dim i as integer
27 Dim aArtisti As String(,) = New String(,) {{"Dal","Da"}, {"Magritte","Ma"}, {"Mir","Mi"}}
28
29 For i = 0 to UBound(aArtisti)
30 If Not artisti.Items.Contains(New ListItem(aArtisti(i,0),aArtisti(i,1))) Then
31 artisti.Items.Add(New ListItem(aArtisti(i,0),aArtisti(i,1)))
32 End If
33 Next i
34
35 End Sub
Nel primo caso è controllata la presenza di una voce “Mango” nell’insieme Items dell’oggetto “frutti”; nel caso non sia trovata è aggiunta all’elenco.
Nel secondo caso il procedimento è leggermente più complesso, ma la filosofia di fondo non cambia:
- è dichiarato un array con i tre artisti
- con un ciclo è controllata la presenza di uno dei tre artisti tra quelli già presenti
- se l’artista non è già presente viene aggiunto alla lista
L’esempio ha evidentemente poco senso in un caso reale, ma dimostra una volta di più come il codice Visual Basic rimanga ben separato dal codice Html della pagina.
L’ultimo List Control presentato sulla pagina è il RadioButtonList Control. Niente di nuovo rispetto a quanto già visto, a parte la possibilità di ordinare verticalmente od orizzontalmente i radio button. Lo rende disponibile la linea:
137 <asp:CheckBox id="chkOrientamento" class="txt" OnCheckedChanged="chkOrientamento_CheckedChanged" AutoPostBack="true" Text="Orizzontale" runat="server" />
Non appena si clicca per cambiare l’ordinamento è richiamato l’evento chkOrientamento_CheckedChanged che alternativamente imposta la proprietà RepeatDirection:
62 Sub chkOrientamento_CheckedChanged(sender As Object, e As EventArgs)
63 If sender.Checked = True Then
64 sport.RepeatDirection = RepeatDirection.Horizontal
65 Else
66 sport.RepeatDirection = RepeatDirection.Vertical
67 End If
68 End Sub
Invio della form
Ma che cosa succede quando premiamo “invia” nella form?
37 Sub Button1_Click(sender As Object, e As EventArgs)
38 risposta.Text = "Hai selezionato ‘" & frutti.SelectedItem.Text & "’ con valore ‘" & frutti.SelectedItem.Value & "’."
39 End Sub
Nel primo caso (DropDownList) è utilizzato l’oggetto SelectedItem per risalire all’elemento selezionato.
41 Sub Button2_Click(sender As Object, e As EventArgs)
42
43 Dim objElemento as ListItem
44 Dim strMessaggio as String
45
46 For Each objElemento in artisti.Items
47 If objElemento.Selected Then
48 strMessaggio += "Hai selezionato ‘" & objElemento.Text & "’ con valore ‘" & objElemento.Value & "’.<br />"
49 End If
50 Next
Nel caso del ListBox control è necessario invece ciclare tra tutti i possibile elementi, perché ne possono essere stati selezionati più d’uno.
56 Sub Button3_Click(Source As Object, e As EventArgs)
57 If sport.SelectedIndex > – 1 Then
58 risposta.Text = "Hai selezionato il radiobutton ‘" & sport.SelectedItem.Text & "’."
59 End If
60 End Sub
Infine, il RadioButtonList control ha un comportamento molto simile al DropDownList Control.
Sommario
I List Controls sono un comodo strumento per visualizzare insiemi di dati. Evitano la stesura di cicli contenenti codice ed Html, rappresentando un’ottima soluzione per praticare la separazione codice/contenuti.