Galileo Computing < openbook >
Galileo Computing - Programming the Net
Galileo Computing - Programming the Net


Einstieg in ASP.NET von Matthias Lohrer
Einstieg in ASP.NET
gp Kapitel Webserversteuerelemente für die Darstellung von Listen
  gp 9.1 Die abstrakte Basisklasse ListControl
  gp 9.2 Das ListItem-Objekt
  gp 9.3 CheckBoxList
    gp 9.3.1 Kontrollkästchen-Listen statisch erstellen
    gp 9.3.2 Kontrollkästchen-Listen dynamisch erstellen
    gp 9.3.3 Dynamische Datenbindung
  gp 9.4 RadioButtonList
  gp 9.5 DropDownList
  gp 9.6 ListBox
  gp 9.7 Repeater und DataList


Galileo Computing

9.3 CheckBoxList  downtop


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.


Galileo Computing

9.3.1 Kontrollkästchen-Listen statisch erstellen  downtop

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>

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


Galileo Computing

9.3.2 Kontrollkästchen-Listen dynamisch erstellen  downtop

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.


Galileo Computing

9.3.3 Dynamische Datenbindung  toptop

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.

  

Einstieg in VB.NET

VB.NET

Einstieg in C#

Visual C#

VB.NET und Datenbanken

Einstieg in XML




Copyright © Galileo Press GmbH 2003
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de