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
  gp 8.1 Webserversteuerelemente formatieren
    gp 8.1.1 Die FontInfo-Klasse
    gp 8.1.2 Die System.Drawing.Color-Struktur
    gp 8.1.3 Die Klasse Unit und die Enumeration UnitType
  gp 8.2 Button
    gp 8.2.1 OnClick
    gp 8.2.2 OnCommand
  gp 8.3 LinkButton
  gp 8.4 ImageButton
  gp 8.5 HyperLink
  gp 8.6 Label
  gp 8.7 Literal
  gp 8.8 Panel
  gp 8.9 TextBox
    gp 8.9.1 Mit JavaScript den Fokus setzen
  gp 8.10 CheckBox
  gp 8.11 Image
  gp 8.12 Webserversteuerelemente für Tabellen
  gp 8.13 RadioButton
  gp 8.14 Calendar
  gp 8.15 AdRotator
  gp 8.16 E-Mails versenden
    gp 8.16.1 Versand von E-Mails mit der Klasse SmtpMail
    gp 8.16.2 E-Mails mit der Klasse MailMessage erstellen


Galileo Computing

8.12 Webserversteuerelemente für Tabellen  toptop


Klassen System.Web.UI.WebControls.Table System.Web.UI.WebControls.TableCell System.Web.UI.WebControls.TableRow
Deklaration <asp:Table id="Table1"
BackImageUrl="url"
CellSpacing="cellspacing"
CellPadding="cellpadding"
GridLines="None|Horizontal|Vertical|Both"
HorizontalAlign=
"Center|Justify|Left|NotSet|Right"
runat="server">
<asp:TableRow>
<asp:TableCell>
Cell text
</asp:TableCell>
</asp:TableRow>
</asp:Table>
Erzeugter HTML-Code Normaler HTML-Code unter Verwendung der üblichen Elemente TABLE, TR und TD
Kurzcharakteristik Die Webserversteuerelemente für Tabellen bieten die serverseitigen Entsprechungen für die allseits bekannten Tabellenelemente von HTML.

Beim Erstellen einfacher HTML-Dateien bereitet die Verwendung der bekannten HTML-Elemente TABLE, TR und TD wahrscheinlich weniger Mühe als der Einsatz der entsprechenden Webserversteuerelemente. Der primäre Einsatzzweck der Tabellen-Steuerelemente liegt darin, dass Sie im Rahmen von .NET-Code die Tabellen leichter dynamisch zusammensetzen können.

webserver_table01.aspx zeigt ein entsprechendes Beispiel: Der Anwender gibt die gewünschte Anzahl von Zeilen und Spalten ein und eine Skript-Routine erstellt eine entsprechende Tabelle. Die Zellen werden fortlaufend nummeriert, und damit die Tabelle nicht so langweilig wird, erhält jede Zelle eine per Zufallsgenerator erzeugte Hintergrundfarbe. Abbildung 8.7 zeigt das Ergebnis im Browser.

<!-- webserver_table01.aspx -->
<% @Page Language="VB" debug="True" Strict="True" %>
<% @Import Namespace="System.Drawing" %>
<% @Import Namespace="System.Random" %> 
<script runat="server" >
dim zufall as New System.Random()
Sub Page_Load (ByVal Sender As Object, _
                      ByVal E As EventArgs)
   If Page.IsPostBack Then
      Dim numSpalten As Integer = _
                   CType(anzahlSpalten.text, Integer)
      Dim numZeilen As Integer = _
                    CType(anzahlZeilen.text, Integer)
      Dim i As Integer
      Dim k As Integer
      Dim zaehler as integer = 1
      ' Tabelle erstellen und dem Ausgabepanel zuweisen
      Dim eineTabelle as new Table()
      ausgabe.Controls.Add(eineTabelle)
      eineTabelle.GridLines = GridLines.Both
      eineTabelle.BorderWidth = Unit.Pixel(1)
       
      For i = 1 to numZeilen
         ' eine neue Reihe erstellen und der Tabelle
         ' zuweisen
         Dim eineReihe as TableRow = New TableRow()
         eineTabelle.Rows.Add (eineReihe)
         For k = 1 to numSpalten
            ' eine neue Zelle erstellen und der Reihe
            ' zuweisen
            Dim eineZelle As New TableCell()
            eineReihe.Cells.Add (eineZelle)
            ' den Zelleninhalt gestalten
            Dim lbl as Label = new Label()
            eineZelle.Controls.Add(lbl)
            lbl.text = CType (zaehler, String)
            zaehler += 1
            eineZelle.BackColor = getZufallsFarbe ()
         Next
      Next
   End If
End Sub
Function getZufallsFarbe () As System.Drawing.Color
   Dim min As Integer = 0
   Dim max As Integer = 255
   Dim r As Integer = zufall.next (min, max)
   dim g As Integer = zufall.next (min, max)
   dim b As Integer = zufall.next (min, max)
   return System.Drawing.Color.FromArgb (r,g,b)
End Function
</script>
<html><head>
<title>Webserversteuerelemente: Tabellen</title>
</head><body>
<h3>Bunte Tabellen zu verschenken</h3>
<form runat="server" id="myForm">
Wie viele Spalten soll die Tabelle haben?
<asp:TextBox type="SingleLine" runat="server"
       Columns="2"
       MaxLength="2"
       id="anzahlSpalten" />
<br>
Wie viele Zeilen soll die Tabelle haben?
<asp:TextBox type="SingleLine" runat="server"
       Columns="2"
       MaxLength="2"
       id="anzahlZeilen" />
<br><br>
<asp:Button id="btnOK" runat="server" 
       Text="   OK   " />
<br><br>          
<asp:Panel id="ausgabe" runat="server" 
                Width="50%" />
</form></body></html>

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 8.7 Die Hintergrundfarben werden mit einem Zufallsgenerator erzeugt.

Der HTML-Teil des Skripts definiert lediglich die beiden Eingabefelder, den OK-Button und ein zunächst noch leeres Panel. Bei der Eingabe der gewünschten Spalten- und Zeilenanzahl wird die maximale Länge auf zwei Zeichen beschränkt, um Monster-Tabellen zu vermeiden.

Beim Versenden des Formulars wird die Page_Load-Prozedur ausgeführt. Nach der Eingabe trifft die Bedingung IsPostBack zu und die Tabellenfabrik beginnt mit der Arbeit.

Da die Seite die Anweisung Strict="True" beinhaltet, müssen die eingegebenen Werte zunächst in einen Integer-Typ konvertiert werden.

Dim numSpalten As Integer = _
                   CType(anzahlSpalten.text, Integer)
Dim numZeilen As Integer = _
                   CType(anzahlZeilen.text, Integer)

Die Tabelle wird erstellt und dem Ausgabe-Panel hinzugefügt.

      Dim eineTabelle as new Table()
      ausgabe.Controls.Add(eineTabelle)

Einige Tabelleneigenschaften werden gesetzt. Der GridLines-Eigenschaft wird ein Wert aus der GridLines-Enumeration zugewiesen.

eineTabelle.GridLines = GridLines.Both

Um die Randstärke angeben zu können, benötigen Sie für die Eigenschaft BorderWidth ein Objekt vom Typ Unit. Mit der statischen Funktion Pixel() der Klasse Unit erstellen Sie ein entsprechendes Objekt mit der gewünschten Pixelzahl.

eineTabelle.BorderWidth = Unit.Pixel(1)

Zwei verschachtelte For-Schleifen erstellen zunächst die Reihen ...

Dim eineReihe as TableRow = New TableRow()
eineTabelle.Rows.Add (eineReihe)

... und dann die Zellen.

Dim eineZelle As New TableCell()
eineReihe.Cells.Add (eineZelle)

Die Add-Methode fügt der jeweiligen Collection Rows beziehungsweise Cells das neu erzeugte Objekt hinzu. Den Zellen selbst wird ein Label-Objekt mit fortlaufender Nummerierung zugewiesen. Für die Definition der Hintergrundfarbe verfügt das Skript über die selbst geschriebene Funktion getZufallsFarbe(). Diese Funktion liefert das benötigte Objekt vom Typ System.Drawing.Color zurück. Drei zufällige Werte zwischen 0 und 255 erzeugen mit Hilfe der Funktion System.Drawing.Color.FromArgb das gewünschte Objekt.

Das zufall-Objekt selbst wird nicht innerhalb der Funktion getZufallsFarbe erzeugt, sondern außerhalb der Prozeduren. Wenn Sie die Zeile

dim zufall as New System.Random()

in die Prozedur getZufallsFarbe() selbst hineinlegen, werden Sie die merkwürdige Erfahrung machen, dass die Tabellenzellen fast alle die gleiche Farbe bekommen. Die Ursache dafür dürfte darin zu suchen sein, dass Zufallszahlengeneratoren immer irgendwelche Zeitangaben verarbeiten, um einen Startwert zu bekommen. Wenn Sie das System.Random-Objekt in der Funktion stets neu erzeugen, dann scheint die Ausgangsposition für dieses Zufallsobjekt zu ordentlich zu sein, als dass es genügend Unordnung erzeugen könnte. Wenn Sie das System.Random-Objekt aber statt dessen außerhalb der Prozedur definieren und nur einmal initialisieren, bleibt dem Objekt offenkundig genügend Zeit, um mächtig Unordnung zu erzeugen. Jedenfalls kann ich mir das Phänomen nicht anders erklären.

Zwei Zeilen ganz am Anfang des Skripts sollen noch erwähnt werden:

<% @Import Namespace="System.Drawing" %>
<% @Import Namespace="System.Random" %>

Diese beiden Namespaces müssen Sie eigens importieren, um die enthaltenen Klassen im Skript verwenden zu können.


Tipp   Bevor Sie ein entsprechendes Beispiel produktiv einsetzen, sollten Sie einmal einen Blick auf den erzeugten Quellcode werfen. Den größten Teil des Quellcodes macht das Viewstate-Feld aus, das in Kapitel 11, der Status von Seiten, Sitzungen und Applikationen, näher vorgestellt wird. Für dieses Beispiel sind aber die Viewstate-Informationen nicht erforderlich. Daher sollten Sie in der Page-Direktive zusätzlich das Attribut EnableviewState="False" angeben. Anschließend sind die erzeugten HTML-Seiten nur noch halb so groß.

  

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