Как отформатировать отдельные элементы 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");