Antonio Feliziani
a- a+

i List Controls - Lavorare con gli insiemi di dati

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:

    <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 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.

    <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 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:

    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 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 codiceHTML 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:

    <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:

    Sub chkOrientamento_CheckedChanged(sender As Object, e As EventArgs)
    If sender.Checked = True Then
      sport.RepeatDirection = RepeatDirection.Horizontal
    Else
      sport.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’oggetto SelectedItem per risalire 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.Items
      If objElemento.Selected Then
        strMessaggio += "Hai selezionato ‘" & objElemento.Text & "’ con valore ‘" & objElemento.Value & "’.<br />"
      End If
    Next


 

Nel caso del ListBox control è necessario invece ciclare tra tutti i possibile elementi, perché ne possono essere stati selezionati 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 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.



Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Lorenzo
Hai qualche domanda da fare?