I have a basic DropDownList bound to a ObjectDataSource:
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" DataSourceID="objDataSource1" DataTextField="FieldName" DataValueField="FieldID" />
The DataTable from which it receives the DataTextField and DataValueField values also returns some other interesting information about the records. Say Active = Y/N for simplicity’s sake.
What I’d like to do is to set the background-color property of the DropDownList Item based on that Active field in the DataSource results. Further, I’d like to do this “in the same pass” as when the DropDownList is bound to the data. So my guess is that it has to happen during OnDataBound.
Things I already know/tried:
-
I could go back and loop through the DropDownList items later. But it would involve embedding loops and re-visiting the DataTable rows and it just seems inefficient
int row; for (row = 0; row < DropDownList1.Items.Count - 1; row++) { [[if this row = that data row]] DropDownList1.Items<div class="su-row"></div>.[[DoStuffHere, etc.]] } -
We already do stuff like this with the GridView
OnRowDataBoundevent, by accessing theGridViewRowEventArgs e. What I seem to be missing is anOnDropDownListItemBoundevent, so to speak.
Hope I’ve been clear and concise. Seems as though it should be easy…
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
You can’t do it during OnDataBinding because the data has not actually been bound yet. Your best shot is (1), that is, use OnDataBound and loop through the items.
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");
}
}
Method 2
I am using This code and it’s working fine with me:
DropDownList1.Items(0).Attributes.CssStyle.Add("color", "Blue");
DropDownList1.Items(0).Attributes.CssStyle.Add("background-color", "#eae9e9");
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0