Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs
ASP German Homepage Homepage
 

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

Optimiertes Erstellen von DropDowns

Geschrieben von: Stephan Troxler
Kategorie: ASP Tricks

Das Problem tritt überall dort auf, wo überlange Dropdownmenüs mit Dutzenden, ja vielleicht sogar Hunderten von Einträgen aus einer Datenbank gelesen und aufbereitet werden. Durch die enorme Datenmenge, welche normalerweise über ein Recordset abgearbeitet und HTML-konform aufbereitet werden muss, verzögert sich der Seitenaufbau schnell einmal um einige Sekunden. Das muss nicht sein! Dieser Artikel zeigt einen cleveren Weg auf, wie mittels weniger Tricks der grösste Teil der Arbeit der Datenbank überlassen wird.

Es war einmal

Nehmen wir als Beispiel ein Dropdown welches alle Ländernamen der Welt auflistet, wie man es häufig im Web antrifft. Die Daten sind in einer Datenbanktabelle "countries" abgelegt, die Spalte mit dem Ländernamen heisst "name" und diejenige mit dem dazugehörigen Länderkürzel "code". Das Ganze sieht in etwa wie folgt aus:

countries
name code
Sweden se
Switzerland ch
Taiwan tw
... ...

Um dem Benutzer das Ausfüllen der Seite abzunehmen, wollen wir anhand seiner Spracheinstellungen aus dem Browser zusätzlich noch dynamisch den Eintrag seines Landes vorselektieren. Den ermittelten Ländercode haben wir dazu in einer lokalen Variablen "selectedcountry" abgelegt.

Das Unheil nimmt seinen Lauf

Im Normalfall würden wir das Länder-Dropdownmenu nun in etwa so generieren:

HTML-Code...
<select name="mydropdown">
<%
Datenbankverbindung öffnen, Recorset (RS) erstellen
...
While not RS.EOF
if RS("code") = selectedcountry then
	myselect = "selected"
else
	myselectd = ""
end if 
%>
<option value="<% =RS("code") %>" <% =myselect %>><% =RS("name")%></option>
<%
wend
%>
</select>
HTML-Code...

Aufwendig ist an dieser Methode einerseits die Vermischung zwischen ASP- und HTML-Code und andererseits die Schleife, welche jedes Element des Recordsets behandelt und mit dem vorgegebenen Ländercode vergleicht. Dieses Vorgehen lässt sich zugegebenermassen noch geringfügig optimieren, in dem der ganze HTML-Code zunächst serverseitig generiert, und dann an einem Stück ausgegeben wird. Unter dem Strich bleibt aber die Schleife über alle Elemente des Recordsets, welche bei grösseren Aufzählungen enorm an der Performance der Seite nagt. Folglich muss genau hier angesetzt werden.

Alle auf einen Streich

Was als ersten Schritt liegt näher, als uns den ganzen späteren HTML-Code bereits in der Abfrage generieren zu lassen? Die nachfolgende SELECT Abfrage zeigt, wie man geschickt den HTML-Code, samt Selektierung des richtigen Landes ins Recordset einfliessen lassen kann.

Beispiel für Access:

SELECT '<option value=""' + Cstr(code) + '""' + 
	iif(Cstr(code)=Cstr(" & myselect & "),' selected ','') + 
	'>' + name + '</option>' FROM countries ORDER BY name

Beispiel für MS SQL Server:

SELECT '<option value=""' + code + '""' + CASE ID WHEN '" & myselect & "' THEN 
	' selected' ELSE '' END + '>' + name + '</option>' 
	FROM countries ORDER BY name

Drei Sachen machen die obenstehenden SQL-Statements speziell:

  • Es wird ein Recordset mit nur einer einzigen Spalte zurückgeliefert. Dies ermöglicht es uns anschliessend das ganze Recordset in einem Zug auszulesen.
  • Der nötige HTML-Code wird in der Abfrage als statischer Teil mit den Tabellenfeldern vermischt. Dadurch entfällt die mühsame, geschleifte Generierung des eigentlichen HTML-Elements
  • Mittels einer Logik im SQL-Statement wird überprüft ob der Eintrag selektiert werden muss. Dadurch entfällt die letzte Hürde, welche uns normalerweise zwingen würde die Einträge über eine Schleife mit dem zu vorselektierten Wert zu vergleichen.

Dropdown aus dem Sack

Nach dem Absetzen des SQL-Befehls bekommen wir nun also ein Recordset mit nur einer Spalte zurück, in welcher der fertige HTML-Code des Dropdownmenus abgebildet ist. Doch wie lesen wir dieses nun geschickt aus?

Das Zauberwort ist GetString, eine Methode des Recordset-Objekts welches uns den ganzen Inhalt als String zurückliefert, wie wir ihn für die Ausgabe im HTML-Code brauchen. Das überarbeitete Beispiel sieht dann in etwa wie folgt aus:

HTML-Code...
<select name="mydropdown">
<%
Datenbankverbindung öffnen, Recorset (RS) erstellen
..
Response.Write(RS.GetString)
%>
</select>
HTML-Code...

Schlußbemerkung

Der Artikel zeit, wie man mit der richtigen Kombination aus Datenbeschaffung und der optimalen Nutzung von VB-Script auch aus klassischem ASP immer wieder einiges herausholen kann. Wenn man den ganzen Zugriff in eine Funktion packt, sind bestehende ASP-Seiten schnell überarbeitet und der einen oder anderen Applikation kann so nochmals etwas Vorschub gegeben werden.

Download des Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

Auto-Generierung von performantem Abfragecode
Datensätze zufällig sortieren
Die SQL ORDER BY Clause
Highspeed-Abfragen einer SQL Server Datenbank
Records zählen mit Stored Procedures
Sprache des Benutzers erkennen

Wenn Sie jetzt Fragen haben...

Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten.

Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.

 

Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.