Antonio Feliziani
a- a+

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 DropDownList contenente alcunicontrolli ListItem. Loscopo è quello di realizzare una serie di tag di tipo select. Conclude il codice (riga 102) unpulsante per l’invio della selezione.

    <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 DropDownList, ma che presentai dati su più righe. Notare la presenzadell’attributo selectionmode=”Multiple” checonsente la selezione di più voci tenendo premuto ilpulsante Ctrl.

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.