У меня есть <asp:DropDownList> внутри <asp:TemplateField>в GridView:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="DatosTablaHandoff">
<Columns>
<asp:TemplateField HeaderText="STATUS">
<ItemTemplate>
<asp:DropDownList ID="DropDownGV" runat="server" onchange="SetDropDownListColor(this);">
<asp:ListItem>Select...</asp:ListItem>
<asp:ListItem>Complete</asp:ListItem>
<asp:ListItem>Running</asp:ListItem>
<asp:ListItem>Waiting in SEV 1</asp:ListItem>
<asp:ListItem>No Batch</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
И у меня есть скрипт в js для установки «цвета фона элемента» в зависимости от выбранного элемента:
function SetDropDownListColor(ddl) {
for (var i = 0; i < ddl.options.length; i++) {
if (ddl.options[i].selected) {
switch (i) {
case 0:
ddl.style.backgroundColor = 'White';
return;
case 1:
ddl.style.backgroundColor = 'lightgreen';
return;
case 2:
ddl.style.backgroundColor = 'Yellow';
return;
case 3:
ddl.style.backgroundColor = 'orangered';
return;
case 4:
ddl.style.backgroundColor = 'Grey';
return;
}
}
}
}
Он работает нормально. Но при постбэке цвет уходит. DropDown в каждой строке остается с выбранным значением, как я хочу, но с белым цветом фона.
У меня есть этот другой скрипт (вне функции), чтобы «сохранить» цвет при обратной передаче, но он работает только в том случае, если DropDownList находится за пределами GridView:
window.addEventListener('load', function () { SetDropDownListColor(document.getElementById('<%= DropDownList1.ClientID %>')); }, false);