2010-05-25 13 views
5

Estoy trabajando con un control DropDownList personalizado en ASP.Net y ha habido una solicitud para mostrar ciertos elementos en la lista con negrita tipo de letra (NOTA - el control hereda de CompositeDataBoundControl para que pueda estar enlazado a datos ... no a DropDownListBox). El control está vinculado a una tabla y hay una columna en la tabla llamada IsUsed: si se establece en verdadero, el elemento correspondiente de la lista se debe representar en negrita. (Cabe señalar aquí que esto solo se verá en Firefox.)Cómo hacer que un control DropDownList muestre algunos elementos en negrita ASP.NET

Mi experiencia está en los niveles medios \ backend, por lo que la capa de presentación es muy nueva para mí. ¿Puede alguien señalarme en la dirección correcta? Mi idea inicial fue que en algún lugar del control personalizado tendría acceso a todas las filas devueltas de la fuente de datos que podría recorrer, etc. pero no estoy seguro si eso es posible ... También hay RenderContents que puedo anular ... ¡parece interesante!

Respuesta

1

OK Creo que he respondido mi propia pregunta pero no parece muy elegante.

Puedo escribir un nuevo proceso almacenado para devolver los datos que necesito mostrar en la lista que devolverá la ID y la DESCRIPCIÓN. Sin embargo, la descripción será la descripción más VERDADERO o FALSO (dependiendo de la bandera IsUsed en la tabla). Luego, en RenderContents puedo dividir la cadena de descripción, analizar el bool y agregar un atributo de estilo, haciendo que el texto sea negrita si el bool es verdadero ...

+0

Yo separaría nuestra descripción y los campos IsUsed y entonces no será necesario dividir la cadena en RenderContents. ** No quiere que su capa de datos se preocupe por la presentación **. ¿Hay alguna razón por la que no puedas devolver el tercer campo? – earthling

+0

Es el código en el control personalizado que divide la cadena pero veo tu punto. Simplemente no sé lo suficiente sobre el enlace de datos, por lo que no importa cuántos campos devuelva mi SP, porque puedo elegir y elegir qué hacer con ellos en el código de listas desplegables correcto. Voy a intentarlo cuando esté en la oficina mañana, ¡definitivamente más elegante que una cuerda delimitada! –

+0

Parece que no puedo hacerlo de esta manera ... En RenderContents parece que solo tengo acceso a la propiedad de elementos del ddl: los elementos solo tienen la descripción y la identificación devueltos del proceso almacenado, el tercer campo que acabo de agregar es ignorado ... –

1

Cualquiera que sea el control que esté utilizando en el lado del servidor, se representará como un html en el navegador del cliente, y la lista desplegable html estándar no admite el diseño de su contenido. En lugar de hacer esto, puede utilizar los controles de lista desplegable personalizados de JavaScript o jQuery.

+0

Así que, si puedo acceder a los datos o no, es indiferente en este momento porque incluso si aplico algún tipo de estilo a los contenidos, ¿no tendrá ningún efecto? –

+1

La solución de abatishchev funciona si desea realizar la entrada en negrita. Pero si desea cambiar el texto parcial, no se puede hacer usando el control del lado del servidor. – Elangovan

+0

Creo que esto depende de cómo se renderiza el texto, cómo se ve en HTML sin formato. Si puede usar el marcado HTML como un texto interno de control, entonces probablemente debería ser más atrevido que un texto en particular. Es decir. que se verá así: ' Mi particular, texto' – abatishchev

3

Aquí es cómo hacer lo que necesita en código subyacente:

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

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

Cualquier control heredado de System.Web.UI.Control tiene la propiedad Attributes que se puede utilizar para agregar o añadir style atributo.

+0

De acuerdo, volvamos al método de control de RenderContents ... ¿seguramente esto arroja HTML para cada elemento de la lista? Por lo tanto, según lo que has dicho, ¿debería poder aplicar un estilo a cada elemento individual? –

+0

Cualquier control del lado del servidor se convierte en uno HTML después del procesamiento. Entonces puede aplicar cualquier método/herramienta/enfoque HTML apropiado – abatishchev

Cuestiones relacionadas