2010-05-25 12 views
5

Ich arbeite mit einem benutzerdefinierten DropDownList-Steuerelement in ASP.Net und es gab eine Anforderung, bestimmte Elemente in der Liste mit einer Fettschrift Schriftart anzuzeigen (HINWEIS - Das Steuerelement erbt von CompositeDataBoundControl, so dass es datengebunden sein kann ... nicht DropDownListBox). Das Steuerelement ist an eine Tabelle gebunden, und es gibt eine Spalte in der Tabelle namens IsUsed. Wenn dies auf true festgelegt ist, sollte das entsprechende Element in der Liste fett dargestellt werden. (Es sollte hier angemerkt werden, dass dies nur in FireFox immer angezeigt wird.)Wie ein DropDownList-Steuerelement einige Elemente fett angezeigt werden ASP.NET

Meine Erfahrung ist alles in der Mitte \ Backend Tiers, so dass die Präsentationsebene ist sehr neu für mich - kann mir jemand in die richtige Richtung zeigen? Mein erster Gedanke war, dass ich irgendwo im benutzerdefinierten Steuerelement Zugriff auf alle Zeilen hatte, die von der Datenquelle zurückgegeben wurden, mit denen ich usw. durchgehen konnte, aber ich bin mir nicht sicher, ob das möglich ist ... Es gibt auch RenderContents, die ich überschreiben kann ... sieht interessant aus!

Antwort

1

OK Ich denke, ich habe meine eigene Frage beantwortet, aber es scheint nicht sehr elegant.

Ich kann einen neuen gespeicherten Proc schreiben, um die Daten zurückzugeben, die ich in der Liste anzeigen muss, die ID und BESCHREIBUNG zurückgeben wird. Die Beschreibung ist jedoch die Beschreibung plus TRUE oder FALSE (je nachdem, welches Flag in der Tabelle verwendet wird). Dann kann ich in RenderContents den Beschreibungsstring teilen, den Boolear analysieren und ein Stilattribut hinzufügen, das den Text fett macht, wenn der Bool True ist ...

+0

Ich würde unsere Beschreibung und die IsUsed-Felder trennen und dann brauchen Sie die Zeichenfolge nicht in den RenderContents aufzuteilen. ** Sie möchten nicht, dass sich Ihre Datenschicht um die Präsentation sorgt **. Gibt es einen Grund, warum das dritte Feld nicht zurückgegeben werden kann? – earthling

+0

Es ist der Code im benutzerdefinierten Steuerelement, der die Zeichenfolge aufteilt, aber ich sehe Ihren Punkt. Ich weiß einfach nicht genug über die Datenbindung - also ist es egal, wie viele Felder mein SP zurückgibt, weil ich einfach auswählen und auswählen kann, was mit ihnen im Dropdown-Listen-Code zu tun ist. Ich gebe es morgen, wenn ich im Büro bin, definitiv eleganter als eine abgegrenzte Saite! –

+0

Sieht nicht so aus, als könnte ich es so machen ... In RenderContents habe ich anscheinend nur Zugriff auf die items -Eigenschaft der ddl - die Elemente haben nur die Beschreibung und die ID aus dem gespeicherten proc, das 3. Feld, das ich gerade hinzugefügt habe ignoriert ... –

1

Unabhängig davon, welches Steuerelement auf der Serverseite verwendet wird, wird es im Clientbrowser als HTML gerendert, und die Standard-Dropdownliste html unterstützt das Formatieren des Inhalts nicht. Stattdessen können Sie JavaScript- oder benutzerdefinierte jQuery-Dropdown-Listensteuerelemente verwenden.

+0

Also, ob ich zu den Daten komme oder nicht, ist im Moment egal Wenn ich eine Art Styling auf den Inhalt anwende, hat das keinen Effekt? –

+1

Die Lösung von abatiishchev funktioniert, wenn Sie den bestimmten Eintrag fett formatieren möchten. Wenn Sie jedoch den partiellen Text ändern möchten, kann dies nicht mithilfe der serverseitigen Steuerung erfolgen. – Elangovan

+0

Ich denke, das hängt davon ab, wie der Text rendert - wie sieht es in rohem HTML aus. Wenn Sie HTML-Markup als einen inneren Kontrolltext verwenden können, dann sollten Sie wahrscheinlich in der Lage sein, einen bestimmten Text fett darzustellen. I.e. es wird wie folgt aussehen: ' Mein insbesondere Text' – abatishchev

3

Hier ist es wie zu tun, was Sie in brauchen Code-Behind:

var item = new ListItem("MyItem"); 
item.Attributes.Add("style", "font-weight: bold"); 

var list = FindControl("DropDownList1"); 
list.Items.Add(item); 

Jede Kontrolle von System.Web.UI.Control geerbt hat Eigenschaft Attributes, die Sie style Attribut hinzufügen oder anhängen können.

+0

OK, also zurück zu der RenderContents-Methode meiner Kontrolle ... sicherlich gibt dies HTML für jedes Element in der Liste aus? Daher sollte ich basierend auf dem, was Sie gesagt haben, in der Lage sein, einen Stil auf jeden einzelnen Gegenstand anzuwenden? –

+0

Jedes serverseitige Steuerelement wird nach dem Rendern in ein HTML-Steuerelement umgewandelt. Sie können also jede geeignete HTML-Methode/Methode/Methode darauf anwenden. – abatishchev

Verwandte Themen