2010-05-25 11 views
5

Sto lavorando con un controllo DropDownList personalizzato in ASP.Net e c'è stata una richiesta di visualizzazione di alcuni elementi nell'elenco con un carattere in grassetto in grassetto (NOTA - il controllo eredita da CompositeDataBoundControl in modo che possa essere associato ai dati ... non DropDownListBox). Il controllo è associato a una tabella e c'è una colonna nella tabella denominata ISUsed, se questa è impostata su true, l'elemento corrispondente nell'elenco dovrebbe essere reso grassetto. (Va notato che questo sarà sempre visto solo in FireFox.)Come rendere un controllo DropDownList visualizzare alcuni elementi in grassetto ASP.NET

La mia esperienza è tutta in mezzo ai livelli di backend quindi il livello di presentazione è molto nuovo per me - qualcuno può indicarmi la giusta direzione? Il mio pensiero iniziale era che da qualche parte nel controllo personalizzato avrei avuto accesso a tutte le righe restituite dall'origine dati che avrei potuto scorrere ecc., Ma non sono sicuro che sia possibile ... Ci sono anche RenderContents che posso ignorare ... sembra interessante!

risposta

1

OK Penso di aver risposto alla mia domanda ma non sembra molto elegante.

Posso scrivere un nuovo stored proc per restituire i dati che devo visualizzare nell'elenco che restituirà ID e DESCRIZIONE. Tuttavia, la descrizione sarà la descrizione più VERO o FALSO (a seconda del flag ISUsed nella tabella). Poi in RenderContents posso dividere la stringa descrittiva, analizzare il bool e aggiungere un attributo di stile che rende il testo grassetto se il bool è vero ...

+0

Vorrei separare la nostra descrizione e campi IsUsed e quindi non avrai bisogno di dividere la stringa nei RenderContents. ** Non vuoi che il tuo livello dati si preoccupi della presentazione **. C'è qualche ragione per cui non si può restituire il terzo campo? – earthling

+0

È il codice nel controllo personalizzato che divide la stringa ma vedo il tuo punto. Non ne so abbastanza sull'associazione dati - quindi non importa quanti campi restituisce il mio SP, perché posso semplicemente scegliere e scegliere cosa fare con loro nel codice dropdownlists corretto? Darò questo risultato quando sarò in ufficio domani, sicuramente più elegante di una stringa delimitata! –

+0

Non sembra che possa farlo in questo modo ... In RenderContents mi sembra di avere solo accesso alla proprietà Items di ddl - gli oggetti hanno solo la descrizione e l'ID restituiti dal proc memorizzato, il terzo campo che ho appena aggiunto è ignorato ... –

1

Qualsiasi sia il controllo che si sta utilizzando sul lato server, verrà visualizzato come html nel browser client e l'elenco a discesa standard HTML non supporta lo stile del contenuto. Invece di fare questo puoi andare su JavaScript o sui controlli personalizzati dell'elenco a discesa jQuery.

+0

Quindi, in qualsiasi momento, posso arrivare ai dati o meno, perché anche se applico una sorta di styling ai contenuti non avrà alcun effetto? –

+1

La soluzione di abatishchev funziona se si desidera rendere la voce particolare con caratteri in grassetto. Ma se vuoi cambiare il testo parziale, allora non può essere fatto usando il controllo laterale del server. – Elangovan

+0

Penso che questo dipenda da come viene visualizzato il testo - come appare in HTML non elaborato. Se puoi usare il markup HTML come un testo interno di controllo, allora probabilmente dovresti riuscire a rendere in grassetto un particolare testo. Cioè essa sarà simile a questa: ' mio particolare testo' – abatishchev

3

Qui è come fare ciò che è necessario in code-behind:

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

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

Qualsiasi controllo ereditato da System.Web.UI.Control ha proprietà Attributes che può essere utilizzato per aggiungere o aggiungere l'attributo style.

+0

OK, quindi torna al metodo RenderContents del mio controllo ... sicuramente questo genera HTML per ogni elemento nell'elenco? Quindi, in base a ciò che hai detto, dovrei essere in grado di applicare uno stile a ogni singolo elemento? –

+0

Qualsiasi controllo sul lato server diventa HTML dopo il rendering. Quindi puoi applicare qualsiasi metodo/strumento/approccio HTML appropriato ad esso – abatishchev

Problemi correlati