Вот быстрый и грязный способ создания собственного ViewState без необходимости создания пользовательского элемента управления для сохранения атрибута на уровне элемента, чего не делает элемент управления по умолчанию.
Вы можете изменить свой кодЧтобы сделать следующее в GetEmpList()
:
private void GetEmpList()
{
List<string> disabledKeys = new List<string>();
SqlDataReader dr = ToolsLayer.GetEmpList();
while (dr.Read())
{
EmpDropDown.Items.Add(new ListItem(
dr["Title"].ToString(), dr["EmpKey"].ToString()));
if (dr["Status"].ToString() == "disabled")
{
disabledKeys.Add(dr["EmpKey"].ToString());
}
}
dr.Close();
ViewState["DisabledKeys"] = disabledKeys;
}
Затем запустите функцию, которая всегда выполняется:
public void SetDisabledStylingOnDropDown()
{
if ((ViewState["DisabledKeys"] != null) &&
(EmpDropDown.Items.Count > 0))
{
List<string> disabledKeys = (List<string>)(ViewState["DisabledKeys"]);
for (int i = 0; i < EmpDropDown.Items.Count; i++)
{
if (disabledKeys.Contains(EmpDropDown.Items[i].Value))
{
EmpDropDown.Items[i].Attributes.Add("style", "background-color:red;");
}
}
}
}
Затем в вашем Page_Load
:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GetEmpList();
}
SetDisabledStylingOnDropDown();
}
** Примечание: могут быть ошибки компиляции, так как я просто набрал это без запуска какого-либо компилятора.Вы должны получить представление о том, что я пытаюсь сделать, основываясь на вышеуказанных изменениях.