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.6 ListBox  toptop


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>&nbsp;&nbsp;
<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>&nbsp;
<asp:Label id="sprachenausgabe" runat="server" />
<br><br>
<asp:Button id="btnOK" runat="server" Text="  OK  " />
</form></body></html>

Abbildung
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 (".")
  

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