i List Controls - Lavorare con gli insiemi di dati
List Controls sono deicontrolli creati per agire sui dati. Sono utilizzati pervisualizzare dati provenienti da collezioni e da database.
Anche se l’esempio che segue utilizza delle collezionidi dati fittizie per popolare i List Controls, il procedimento è ilmedesimo qualunque sia la sorgente dati a cui connettersi.
Una pagina con ListControls
Ecco alcuni ListControls:
Alcuni List Controls
Si tratta di ComboBox,CheckBox e RadioButtons.
ASP.NET semplifica enormemente la costruzione del“legame” tra codice e dati, favorendo ilpiù possibile la separazione tra codice e contenuto.
Analizziamo quindi il codice sorgente delle partisignificative della pagina:
<div class="titolo">DropDownList Control</div><p>Selezionare una voce dall’elenco</p> <asp:DropDownList id="frutti" runat="server"> <asp:ListItem value="Fr">Fragola</asp:ListItem> <asp:ListItem value="La">Lampone</asp:ListItem> <asp:ListItem value="Ci">Ciliegia</asp:ListItem> </asp:DropDownList> <br /><br /> <asp:Button id="button1" Text="Invia" OnClick="Button1_Click" runat="server"/>
Nel codice sopra riportato non è presente niente dieccezionale. È dichiarato un controllo di tipo
<div class="titolo">ListBox Control</div> <p>Selezionare una voce dall’elenco</p> <asp:ListBox id="artisti" rows="2" selectionmode="Multiple" runat="server"> <asp:ListItem value="Pi">Picasso</asp:ListItem> <asp:ListItem value="Kl">Klee</asp:ListItem> <asp:ListItem value="Mo">Modigliani</asp:ListItem></asp:ListBox> <br /><br /> <asp:Button id="button2" Text="Invia" OnClick="Button2_Click" runat="server"/>
Qui è invece dichiarato un oggetto di tipo ListBox, molto simile al
Agire sui List Controlsda codice
Se osserviamo con attenzione il codice e lo confrontiamo conil 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, inparticolare nell’evento Page_Load:
Sub Page_Load(sender as Object, e as EventArgs) ‘Se il Mango non e’ gia’ presente, lo aggiungo Dim lsiFrutto as New ListItem("Mango" ,"Ma") If Not frutti.Items.Contains(lsiFrutto) Then frutti.Items.Add(lsiFrutto) End If ‘Aggiungo altri artisti Dim i as integer Dim aArtisti As String(,) = New String(,) {{"Dal" ,"Da"}, {"Magritte" ,"Ma"}, {"Mir" ,"Mi"}} For i = 0 to UBound(aArtisti)If Not artisti.Items.Contains(New ListItem(aArtisti(i,0),aArtisti(i,1))) Then artisti.Items.Add(New ListItem(aArtisti(i,0),aArtisti(i,1))) End If Next i End Sub
Nel primo caso è controllata la presenza di una voce“Mango” nell’insieme Itemsdell’oggetto “frutti”; nel caso non siatrovata è aggiunta all’elenco.
Nel secondo caso il procedimento è leggermentepiù 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 VisualBasic rimanga ben separato dal codiceHTML della pagina.
L’ultimo ListControl presentato sulla pagina è ilRadioButtonList Control. Niente di nuovo rispetto a quantogià visto, a parte la possibilità di ordinareverticalmente od orizzontalmente i radio button. Lo rendedisponibile la linea:
<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’eventochkOrientamento_CheckedChanged che alternativamente impostala proprietàRepeatDirection:
Sub chkOrientamento_CheckedChanged(sender As Object, e As EventArgs) If sender.Checked = True Thensport.RepeatDirection = RepeatDirection.Horizontal Elsesport.RepeatDirection = RepeatDirection.Vertical End If End Sub
Invio della form
Ma che cosa succede quando premiamo “invia”nellaform?
Sub Button1_Click(sender As Object, e As EventArgs) risposta.Text = "Hai selezionato ‘" & frutti.SelectedItem.Text & "’ con valore ‘" & frutti.SelectedItem.Value & "’." End Sub
Nel primo caso (DropDownList) è utilizzato l’oggettoSelectedItem perrisalire all’elemento selezionato.
Sub Button2_Click(sender As Object, e As EventArgs) Dim objElemento as ListItem Dim strMessaggio as String For Each objElemento in artisti.ItemsIf objElemento.Selected Then strMessaggio += "Hai selezionato ‘" & objElemento.Text & "’ con valore ‘" & objElemento.Value & "’.<br />"End If Next
Nel caso del ListBoxcontrol è necessario invece ciclare tra tutti ipossibile elementi, perché ne possono essere statiselezionati più d’uno.
Sub Button3_Click(Source As Object, e As EventArgs) If sport.SelectedIndex > - 1 Then risposta.Text = "Hai selezionato il radiobutton ‘" & sport.SelectedItem.Text & "’." End If End Sub
Infine, il RadioButtonList control ha un comportamento moltosimile al DropDownListControl.
Sommario
I List Controls sono uncomodo strumento per visualizzare insiemi di dati. Evitano lastesura di cicli contenenti codice ed HTML, rappresentandoun’ottima soluzione per praticare la separazionecodice/contenuti.