9.3 CheckBoxList
 
| Klasse
|
System.Web.UI.WebControls.CheckBoxList
|
| Deklaration
|
<asp:CheckBoxList id="myCheckBoxList"
AutoPostBack="True|False"
DataSource='<% databindingexpression %>'
DataTextField="DataSource-Feld"
DataValueField="DataSource-Feld"
RepeatColumns="Anzahl Spalten"
RepeatDirection="Vertical|Horizontal"
RepeatLayout="Flow|Table"
TextAlign="Right|Left"
OnSelectedIndexChanged="Ereignisprozedur"
runat="server">
|
|
|
<asp:ListItem value="value"
selected="True|False">
Text
</asp:ListItem>
</asp:CheckBoxList>
|
| Erzeugter HTML-Code
|
Bei RepeatLayout="Flow":
<span id="myCheckBoxList">
<input type="checkbox" ... /><label ...>Checkbox-Beschriftung</label><br> ... weitere Input-Elemente
</span>
Bei RepeatLayout="Table" werden die einzelnen Kontrollkästchen mit Hilfe einer HTML-Tabelle ausgerichtet.
|
| Kurzcharakteristik
|
Das CheckBoxList-Steuerelement erzeugt in Verbindung mit ListItem-Elementen mehrere Kontrollkästchen.
|
9.3.1 Kontrollkästchen-Listen statisch erstellen
 
Das erste Beispiel illustriert die grundlegende Verwendung und Definition einer Kontrollkästchen-Liste. Ein Formular stellt dem Anwender die Frage »Welche Programmiersprachen beherrschen Sie?« Mit Hilfe einer Reihe von Kontrollkästchen selektiert der Anwender die ihm vertrauten Sprachen.
<!-- listen_checkbox01.aspx -->
<%@ Page Language="VB" debug="True" Strict="True" %>
<script runat="server" >
Sub Page_Load (ByVal Sender As Object, _
ByVal E As EventArgs)
If Page.IsPostBack Then
Dim tmp As New StringBuilder()
Dim li as ListItem
For each li in checklisteSprachen.Items
If li.selected() Then
tmp.Append ("<li>" & li.Text)
End If
Next
If tmp.Length = 0 Then
ausgabe.Text = _
"Sie beherrschen keine Programmiersprachen. "
Else
tmp.Insert (0, "Sie beherrschen: <ul>")
tmp.Append ("</ul>")
ausgabe.Text = tmp.ToString
End If
End If
End Sub
</script>
<html><head>
<title>Webserversteuerelemente für Listen: CheckBoxList
</title></head><body>
<h3>Webserversteuerelemente für Listen: CheckBoxList
</h3>
<form runat="server" id="myForm">
Welche Programmiersprachen beherrschen Sie:<br>
<asp:CheckBoxList runat="server"
id="checklisteSprachen"
AutoPostBack="true"
RepeatColumns="1"
RepeatLayout="Flow" >
<asp:ListItem value="1" text="Java" />
<asp:ListItem value="2">C++</asp:ListItem>
<asp:ListItem>Visual Basic</asp:ListItem>
<asp:ListItem text="Cobol" />
<asp:ListItem value="Smalltalk" />
</asp:CheckBoxList><br>
<asp:Button id="btnOK" runat="server" Text=" OK " />
<p><asp:Label id="ausgabe" runat="server" /></p>
</form></body></html>
 Hier klicken, um das Bild zu Vergrößern
Abbildung 9.1 Das CheckBoxList-Steuerelement erleichtert in Formularen die Darstellung von Listen.
Das CheckBoxList-Steuerelement enthält in diesem Beispiel nur wenige Attribute. Mit RepeatColumns="1" und RepeatLayout="Flow" erhalten Sie eine einspaltige Auflistung, die im HTML-Code mit einfachen <br>-Tags umbrochen wird.
| Tipp Die verschiedenen ListItem-Einträge demonstrieren die diversen Möglichkeiten, die Text- und Value-Attribute zu definieren oder es bleiben zu lassen. Wenn nur eines der beiden Attribute definiert wird, übernimmt ASP.NET den Wert automatisch auch für das andere Attribut. Der Wert für das Text-Attribut lässt sich entweder zwischen dem öffnenden und schließenden Tag oder ausdrücklich durch Verwendung des Text-Attributs bestimmen.
|
Die Page_Load-Prozedur erzeugt die Ausgabe im Label-Feld. Der Ausgabetext wird in einem Objekt der Klasse StringBuilder zusammengesetzt und am Schluss mit der Anweisung
ausgabe.Text = tmp.ToString
dem Ausgabefeld zugewiesen. Die For-Schleife klappert alle Einträge der Items-Collection von checklisteSprachen ab. Wenn ein Eintrag selektiert ist, wird der Text-Bestandteil der Liste dem temporären StringBuilder-Objekt angehängt:
tmp.Append ("<li>" & li.Text)
Im Code wird man sonst häufig auf die Value-Eigenschaft zugreifen. Im Beispiel wurden in diesem Fall bei den Einträgen Java und C++ die Value-Werte 1 und 2 verwendet.
Wenn die Items-Collection abgearbeitet wurde, werden einige ergänzende Text-Bestandteile eingefügt und das Ergebnis wird im ausgabe-Feld angezeigt.
9.3.2 Kontrollkästchen-Listen dynamisch erstellen
 
Wenn Sie die Anzahl und die Art der Einträge für Ihre Kontrollkästchen-Liste zur Kompilierzeit nicht kennen, bieten sich verschiedene Möglichkeiten an, die Listeneinträge zur Laufzeit einzufügen. Das CheckBoxList-Steuerelement kennt das Init-Ereignis, mit dem Sie das Steuerelement initialisieren können. Wenn Sie das Beispiel-Formular dynamisch erzeugen möchten, ergänzen Sie bei der Deklaration des CheckBoxList-Steuerelements einen entsprechenden Prozeduraufruf und ergänzen diese Prozedur im Skript-Bereich.
So nutzen Sie das Init-Ereignis zur Initialisierung einer Liste von Kontrollkästchen. Im ersten Schritt ergänzen Sie im Skript-Bereich diese Ereignisprozedur:
Sub checklisteSprachen_Init (ByVal Sender As Object, _
ByVal E As EventArgs)
Dim sprachenText() As String = _
{"Java", "C++", "Visual Basic", "Cobol", "Smalltalk"}
Dim sprachenValue() As String = _
{"jav", "cpp", "bas", "cob", "sma"}
Dim i As Integer
For i = 0 To sprachenText.GetLength(0) -1
checklisteSprachen.Items.Add _
(new ListItem(sprachenText(i), sprachenValue(i)))
Next
End Sub
Im zweiten Schritt ergänzen Sie im HTML-Bereich beim CheckBoxList-Steuerelement die Attributdefinition onInit="checklisteSprachen_Init". Außerdem definieren Sie keine ListItem-Einträge:
<asp:CheckBoxList runat="server"
id="checklisteSprachen"
AutoPostBack="true"
RepeatColumns="1"
RepeatLayout="Flow"
onInit="checklisteSprachen_Init" />
Das Skript legt zwei Arrays gleicher Länge an. sprachenText() enthält die Angaben für das Text-Attribut. In sprachenValue() definieren Sie gesondert die Einträge für das Value-Attribut. Die For-Schleife durchläuft alle Array-Einträge und fügt bei jedem Durchlauf der CheckBoxList einen weiteren ListItem-Eintrag hinzu:
checklisteSprachen.Items.Add _
(new ListItem(sprachenText(i), sprachenValue(i)))
Wenn Sie dem ListItem-Konstruktor zwei Text-Parameter übergeben, wird der erste Wert als Text-Attribut und der zweite Wert als Value-Attribut verwendet.
9.3.3 Dynamische Datenbindung
 
Das ist schon nicht schlecht, aber es geht noch schneller. Wenn identische Werte für die Attribute Value und Text Sie nicht stören, können Sie über das DataSource-Attribut der CheckBoxList ein komplettes Array zuweisen. Die Initialisierungs-Prozedur hat dann diese Form:
Sub checklisteSprachen_Init (ByVal Sender As Object, _
ByVal E As EventArgs)
Dim sprachenText() As String = _
{"Java", "C++", "Visual Basic", "Cobol", "Smalltalk"}
checklisteSprachen.DataSource = sprachenText
checklisteSprachen.DataBind()
End Sub
Sie können auch getrennte Werte für Value und Text angeben. Im Abschnitt 12.5.2 erfahren Sie außerdem genauer, wie Sie auch Tabellen aus Datenbanken an Listensteuerelemente anbinden können.
|