Thomas Bandt

Über mich | Kontakt | Archiv

ASP.NET DropDownList und OptGroups

Ein von Webdesignern und Webentwicklern häufig nicht genutztes Mittel zur Strukturierung von Auswahllisten ist das optgroup-Tag, mit dem man Listeneinträge, also "options" gruppieren kann. Und das, obwohl es dieses HTML-Tag wirklich schon seit Ewigkeiten gibt.

Irgendwie ist es aber auch an den Entwicklern der WebControls bei Microsoft vorbeigegangen, denn obwohl wir bereits die Version 3.5 von ASP.NET schreiben, haben sie es in nunmehr fast 8 Jahren ASP.NET bis heute nicht geschafft, dieses "Feature" hinzuzufügen.

Was also tun? Als erstes wird man auf den Beitrag beim CodeProject stoßen. Leider krankt diese Lösung aber an Kinderkrankheiten, unter anderem gibt es keinen ViewState-Support. Diesen hat Albert in seiner Lösung von vor 2,5 Jahren nachgerüstet.

Leider hat aber auch die Probleme mit dem ViewState, wenn man die Controls in einem komplexeren Formular mit dynamisch geladenen Controls verwendet. Ich hatte heute wenig Zeit und Lust dem Fehler in Alberts Lösung auf den Grund zu gehen, daher habe ich weitergesucht, und tatsächlich auch eine gute Lösung gefunden.

SharpPieces nennt sich ein Projekt, was zwar nicht mehr sehr aktiv gepflegt wird, aber unter anderem eine ausgefeilte Lösung für OptionGroups mitbringt. Das Control "ExtendedDropDownList" macht was man erwartet und läuft auch in komplexen Formularen mit korrekter ViewState-Unterstützung.

Noch ein Tipp: die Gruppierung erfolgt (leider) nicht automatisch. Wer also Items dynamisch hinzufügt, muss sich selbst drum kümmern, dass nicht jedes Item in seiner eigenen Gruppe landet. Hier ein Snippet, wie das funktionieren kann:

   1:  // Produkte holen und an die Liste binden
   2:  string currentGroup = "";
   3:  foreach (Fund p in availableFunds)
   4:  {
   5:      ExtendedListItem item = new ExtendedListItem();
   6:      item.Text = string.Format("{0} - WKN {1} - RK {3} - ISIN {2} - {4}", 
   7:                      p.Name, p.SIN, p.ISIN, p.RiskClass, p.CurrencySymbol);
   8:      item.Value = p.ID.ToString();
   9:      item.GroupingText = p.RatingText;
  10:      item.GroupingType = currentGroup != p.RatingText ? 
  11:                                          ListItemGroupingType.New : 
  12:                                          ListItemGroupingType.Inherit;
  13:      list.ExtendedItems.Add(item);
  14:      currentGroup = p.RatingText;
  15:  }

 

Kommentare

  1. Thomas goes .NET schrieb am Montag, 17. Mai 2010 10:05:00 Uhr:

    Ich habe eine Liste von Usern, die ich in einer ListBox auswählbar machen möchte. Diese User sind allesamt jeweils einer Firma zugeordnet. Also hatte ich die fromme Idee, sie entsprechend ihrer Firma in der ListBox zu gruppieren. Ein Standard-Feature ...


« Zurück  |  Weiter »