9.6 ListBox
 
| Klasse
|
System.Web.UI.WebControls.ListBox
|
| Deklaration
|
<asp:ListBox id="myID"
DataSource="<% databindingexpression %>"
DataTextField="DataSource-Feld"
DataValueField="DataSource-Feld"
AutoPostBack="True|False"
Rows="Anzahl Zeilen"
SelectionMode="Single|Multiple"
OnSelectedIndexChanged=
"OnSelectedIndexChanged-Methode"
runat="server">
<asp:ListItem value="value"
selected="True|False">
Text
</asp:ListItem>
</asp:ListBox>
|
| Erzeugter HTML-Code
|
<select name="myID"
id="myID" size="Rows-Attribut">
<option value="Wert">Text</option>
</select>
|
| Kurzcharakteristik
|
Erzeugt ein Listenfeld. Das Attribut SelectionMode legt fest, ob ein Eintrag oder mehrere Einträge selektiert werden können. Das Attribut rows legt fest, wie viele Einträge gleichzeitig sichtbar sind.
|
Wenn der Anwender in einem Listenfeld nur einen einzigen Eintrag selektieren kann, dann funktioniert ein Listenfeld fast genau so wie ein Dropdown-Listenfeld. Über das Attribut SelectionMode="Multiple" können Sie aber zusätzlich die Möglichkeit anbieten, mehrere Einträge zu selektieren. Wie in Abbildung 9.3 zu sehen ist, demonstriert listen_listbox01.aspx beide Möglichkeiten.
<!-- listen_listbox01.aspx -->
<%@ Page Language="VB" debug="True" Strict="True" %>
<script runat="server" >
Sub progsprachen_Init _
(ByVal Sender As Object, ByVal E As EventArgs)
Dim sprachen() As String = _
{"Java", "C++", "Visual Basic", "Cobol", "Smalltalk"}
progsprachen.DataSource = sprachen
progsprachen.DataBind()
End Sub
Sub progsprachen_SelectedIndexChanged _
(ByVal Sender As Object, ByVal E As EventArgs)
Dim tmp As new StringBuilder
Dim li as ListItem
For Each li in progsprachen.Items
If li.Selected Then
tmp.Append (li.Text)
tmp.Append (", ")
End If
Next
If tmp.Length = 0 Then
tmp.Append _
("Sie beherrschen keine Programmiersprachen.")
Else
tmp.Insert (0, "Sie kennen: ")
tmp.Remove (tmp.Length -2 , 2)
tmp.Append (".")
End If
sprachenausgabe.Text = tmp.ToString()
End Sub
Sub laenderliste_Init _
(ByVal Sender As Object, ByVal E As EventArgs)
Dim laender(,) As String = { _
{"Baden-Württemberg", "BAW"}, _
{"Bayern", "BAY"}, _
{"Berlin", "BER"}, _
{"Brandenburg", "BRA"}, _
{"Bremen", "BRE"}, _
{"Hamburg", "HAM"}, _
{"Hessen", "HES"}, _
{"Mecklenburg-Vorpommern", "MEC"}, _
{"Niedersachsen", "NIE"}, _
{"Nordrhein-Westfalen", "NRW"}, _
{"Rheinland-Pfalz", "PFA"}, _
{"Saarland", "SAR"}, _
{"Sachsen", "SAC"}, _
{"Sachsen-Anhalt", "ANH"}, _
{"Schleswig-Holstein", "HOL"}, _
{"Thüringen", "THU"} _
}
Dim i As Integer
For i = 0 to laender.GetLength(0) – 1
laenderliste.Items.Add _
(new ListItem (laender(i,0), laender(i,1)))
Next
End Sub
Sub laenderliste_SelectedIndexChanged _
(ByVal Sender As Object, ByVal E As EventArgs)
If laenderliste.SelectedIndex <> -1 Then
laenderausgabe.text = "Sie kommen aus " & _
laenderliste.SelectedItem.Text & "."
End If
End Sub
</script>
<html><head>
<title>Webserversteuerelemente für Listen: ListBox
</title></head><body>
<h3>Webserversteuerelemente für Listen: ListBox</h3>
<h3>1. Aus welchem Bundesland kommen Sie?</h3>
<form runat="server" id="myForm">
<asp:ListBox id="laenderliste" runat="server"
Rows="4"
SelectionMode="Single"
AutoPostBack="True"
OnSelectedIndexChanged=
"laenderliste_SelectedIndexChanged"
OnInit="laenderliste_Init" >
</asp:ListBox>
<asp:Label id="laenderausgabe" runat="server" />
<h3>2. Welche Programmiersprachen beherrschen Sie?</h3>
<asp:ListBox id="progsprachen" runat="server"
Rows="3"
SelectionMode="Multiple"
AutoPostBack="True"
OnSelectedIndexChanged=
"progsprachen_SelectedIndexChanged"
OnInit="progsprachen_Init" >
</asp:ListBox>
<asp:Label id="sprachenausgabe" runat="server" />
<br><br>
<asp:Button id="btnOK" runat="server" Text=" OK " />
</form></body></html>
 Hier klicken, um das Bild zu Vergrößern
Abbildung 9.4 Über das Attribut SelectionMode (Single oder Multiple) steuern Sie, ob der Anwender in einer ListBox nur einen oder mehrere Einträge selektieren kann.
Beide Listensteuerelemente werden jeweils über das Init-Ereignis initialisiert. Die Liste der Programmiersprachen wird über ein Array definiert, das mit der DataBind-Methode an das Listenfeld gebunden wird. Auf diese Weise erhalten die ListItem-Einträge identische Werte für Value und Text. Die Initialisierung der Liste mit den Bundesländern ist identisch mit der Initialisierung im vorangegangenen Beispiel.
Je nachdem, ob nur einer oder mehrere Einträge selektiert werden können, sind für die Bearbeitung des SelectedIndexChanged-Ereignisses unterschiedliche Auswertungen nötig. Das Listenfeld für die Auswahl des Bundeslandes ist mit dem Attribut SelectionMode="Single" definiert. Damit kann die Auswertung in exakt der gleichen Form geschehen wie im vorangegangenen Beispiel für das Dropdown-Listenfeld. Erst überprüft die Prozedur mit
If laenderliste.SelectedIndex <> -1 Then
ob überhaupt etwas selektiert wurde. Dann steht mit laenderliste.SelectedItem.Text dem direkten Zugriff auf das eine selektierte ListItem-Objekt nichts mehr im Wege.
Das Listenfeld für die Angabe der Programmiersprachen erlaubt durch die Deklaration SelectionMode="Multiple" die Selektion mehrerer Einträge. Zur Auswertung bleibt Ihnen hier kein anderer Weg als das bereits bekannte »Abklappern« aller Einträge mit der jeweiligen Abfrage »Bist Du ausgewählt worden? Ja oder Nein?«
For Each li in progsprachen.Items
If li.Selected Then
tmp.Append (li.Text)
tmp.Append (", ")
End If
Next
Die selektierten Sprachen werden im StringBuilder-Objekt gesammelt und mit einem abschließendem Komma vom nächsten Eintrag separiert. Wenn zu Ende abgeklappert wurde, betrachtet sich der Code sein StringBuilder-Objekt näher. Ist es leer, erfolgt die Meldung Sie beherrschen keine Programmiersprachen. Andernfalls werden die bekannten Sprachen aufgelistet. Dabei ist die Prozedur richtig pingelig, denn sie ersetzt vorher noch das letzte abschließende Komma und Leerzeichen durch einen Punkt.
tmp.Remove (tmp.Length -2 , 2)
tmp.Append (".")
|