2010-04-09 7 views
13

Tengo un DropDownList básico unido a un ObjectDataSource:Cómo dar formato a los elementos individuales DROPDOWNLIST (color, etc.) durante el evento OnDataBinding

<asp:DropDownList ID="DropDownList1" runat="server" 
AutoPostBack="True" DataSourceID="objDataSource1" 
DataTextField="FieldName" DataValueField="FieldID" /> 

El DataTable de la que recibe el DataTextField y DataValueField valores también devuelve algún otro información interesante sobre los registros. Diga Active = Y/N por simplicidad.

Lo que me gustaría hacer es establecer la propiedad background-color del artículo DropDownList basado en ese campo Activo en los resultados de DataSource. Además, me gustaría hacer esto "en el mismo paso" que cuando DropDownList está vinculado a los datos. Así que supongo que tiene que suceder durante OnDataBound.

cosas que ya sabe/intentado:

  1. pudiera volver atrás y recorrer los elementos DropDownList más tarde. Pero implicaría la incorporación de bucles y volver a visitar las filas DataTable y que sólo parece ineficiente

    int row; 
    for (row = 0; row < DropDownList1.Items.Count - 1; row++) 
    { 
        [[if this row = that data row]] 
        DropDownList1.Items[row].[[DoStuffHere, etc.]] 
    } 
    
  2. Ya hacemos este tipo de cosas con el evento GridView OnRowDataBound, accediendo a la GridViewRowEventArg s e. Lo que parece que me falta es un evento OnDropDownListItemBound, por así decirlo.

Espero que haya sido claro y conciso. Parece como si debe ser fácil ...

Respuesta

23

Usted no puede hacerlo durante OnDataBinding porque los datos no ha sido en realidad todavía atado. Su mejor opción es (1), es decir, usar OnDataBound y recorrer los elementos.

protected void DropDownList1_DataBound(object sender, EventArgs e) 
{ 
    foreach(ListItem myItem in DropDownList1.Items) 
    { 
     //Do some things to determine the color of the item 
     //Set the item background-color like so: 
     myItem.Attributes.Add("style","background-color:#111111"); 
    } 
} 
+0

Gracias por la unión frente a la corrección Bound. Editando eso. Supongo que mi pregunta sigue siendo si hay una forma de manejar cada artículo individual como está vinculado, de forma muy similar a lo que puede hacer con las filas individuales de un Gridview. Si tal cosa no se presenta, tendré que escribir – LesterDove

+0

@LesterDove Por lo que puedo decir de MSDN, no existe tal cosa como ItemDataBound para el control DropDownList o la clase ListItemCollection, que son los elementos que se guardan por la lista desplegable. –

+1

Gracias. Siendo este el caso, evitaré unir el control por completo y llenarlo programáticamente para que pueda realizar esos ajustes condicionales sobre la marcha. – LesterDove

1

estoy utilizando este código y que está funcionando bien para mí:

DropDownList1.Items(0).Attributes.CssStyle.Add("color", "Blue"); 
DropDownList1.Items(0).Attributes.CssStyle.Add("background-color", "#eae9e9"); 
Cuestiones relacionadas