.net Dropdownlist für klassisches ASP

By | March 25

Vielleicht recht brauchbar für alle die noch mit klassischem ASP programmieren: habe das Dropdownlist-control aus .net nachgebastelt. Namensgebung und Funktionalität sollte im wesentlichen übereinstimmen. Kleinigkeiten wollte ich besser (bzw. anders) machen als wie es bereits existiert. Zumindest intuitiver, meinen Vorstellungen nach :) Kurz eine Zusammenfassung was es so bietet:

  • OO-Control für klassisches ASP
  • Namesgebung und Funktionalität grösstenteils vom .net übernommen
  • als Datenquelle kann array, recordset oder dictionary verwendet werden
  • Ereignisbehandlung während dem rendering (onItemCreated)
  • direkte Ausgabe mittels draw() oder output als String mit toString()
  • Volle Multiple-dropdown funktionalität. (selectedItems können einer sein oder mehrere (array))
  • Stringbuilder-kompatibel. DLL muss dafür am Server vorhanden sein.
  • sollte leicht leserlicher und verständlicher Code sein … hoffentlich :)

Anbei nun ein kurzes Beispiel wie man damit startet. Den Rest bitte aus den Klassen selber rauslesen. Die Schnittstelle sollte genügend dokumentiert sein:

Hier gibts das Control zum downloaden

1. Zuerst mal den Import der Klasse realisieren. Eh klar mit einem Include:

  1. <!--#include file="dropdown.asp"-->

2. Nun erstellen wir ein einfaches Dropdown und zwar mit einem Array als Datenquelle:

  1. set dd = new Dropdown
  2. dd.datasource = array("one", "two", "three")
  3. dd.draw()
  4. set dd = nothing

Mittels draw() wirds direkt zum Browser geschickt (gezeichnet eben). Um es z.b. als String zu erhalten verwende einfach toString(). Bei Dropdowns mit riesigen Datenmengen empfiehlt es sich das Dropdown mit Hilfe vom Stringbulider zu verwenden. Hierzu dient die useStringBuilder-Eigenschaft.

3. Beispiel zur Behandlung des onItemcreated-Ereignisses

  1. set dd = new Dropdown
  2. set aDict = server.createObject("scripting.dictionary")
  3. aDict.add 1, "yes"
  4. aDict.add 2, "no"
  5. set dd.datasource = aDict
  6. dd.onItemCreated = "onDDItemCreated"
  7. dd.draw()
  8. set dd = nothing
  9.  
  10. function onDDItemCreated(item)
  11.   if item.index = 1 then item.style = "color:red"
  12. end function

In diesem Beispiel verwende ich ein Dictionary als Datenquelle. Funktioniert auch Prima! Um das onItemCreated-Ereignis behandeln zu können, muss der onItemCreated-Eigenschaft der Name der ereignisbehandelnden Funktion übergeben werden. In unserem Fall onDDItemCreated. Diese muss natürlich auch implementiert werden inkl. einem Parameter, welcher natürlich das gerade durchlaufende dropdownItem darstellt. In meinem Beispiel färbe ich das 2.Element rot ein. Nichts einfach als das ;)
Mit Hilfe dieser Ereignisbehandlung ist nun eine einfach Manipulation sämtlicher Einstellungen zur “Laufzeit” möglich. Z.b. könnte man auf die Datenquelle des Dropdowns zugreifen und somit auf den Inhalt dessen reagieren. Sehr interessant vorallem dann wenn ein Recordset als Quelle verwendet wird.

4. Viel Spaß damit!

Kurze Anmerkung noch: Sollte ein Recordset als Quelle verwendet, dann muss dieses einen statischen Cursor verwenden (rs.cursorType = adOpenStatic). Bin erfreut über jedes Kommentar. Verwende das Control in all meinen Projekten und alle Probleme waren damit lösbar … somit nicht gleich aufgeben falls etwas nicht gleich beim ersten mal klappt.