Как отформатировать отдельные элементы DropDownlist (цвет и т.д.) Во время события onDataBinding

У меня есть базовый DropDownList, связанный с объектом ObjectDataSource:

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

DataTable, из которого он получает значения DataTextField и DataValueField, также возвращает другую интересную информацию о записях. Скажите Active = Y/N для простоты.

Что я хотел бы сделать, так это установить свойство background-color элемента DropDownList на основе этого поля Active в результатах DataSource. Кроме того, я хотел бы сделать это "в тот же проход", как если DropDownList привязан к данным. Поэтому я предполагаю, что это должно произойти во время OnDataBound.

Вещи, которые я уже знаю/пробовал:

  • Я мог бы вернуться и снова пропустить элементы DropDownList. Но это потребует внедрения циклов и повторного посещения строк DataTable, и это просто кажется неэффективным

     int row;
     for (row = 0; row < DropDownList1.Items.Count - 1; row++)
     {
        [[if this row = that data row]]
         DropDownList1.Items[row].[[DoStuffHere, etc.]]
     }
    
  • Мы уже делаем такие вещи с помощью события GridView OnRowDataBound, обращаясь к GridViewRowEventArg e. Кажется, что мне кажется, что отсутствует событие OnDropDownListItemBound.

Надеюсь, я был ясен и краток. Кажется, что это должно быть легко...

Ответы

Ответ 1

Вы не можете сделать это во время OnDataBinding, потому что данные еще не были привязаны. Ваш лучший снимок - (1), то есть использовать OnDataBound и прокручивать элементы.

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");
    }
}

Ответ 2

Я использую этот код, и он отлично работает со мной:

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