У меня есть gridview с флажком и выпадающим списком.
Флажок по умолчанию не установлен. Выпадающий список по умолчанию отключен.
В режиме редактирования сетки, когда пользователь устанавливает флажок, я хочу, чтобы раскрывающийся список стал активным. Если бы я мог сделать эту клиентскую часть, это было бы здорово, если нет, я хочу сделать это на стороне сервера БЕЗ необходимости нажимать кнопку «Обновить», а затем снова редактировать.
Это на С#
Спасибо!
Что я пробовал:
grdiview основан на источнике данных, поэтому изначально я пытался основывать включенное значение раскрывающегося списка на данных Eval значения данных флажка. Однако для этого требовалось установить флажок, нажать «Обновить», а затем отредактировать, чтобы включить ddl. Затем я подумал, что, может быть, автопостбэк поможет всем пользователям не нажимать кнопку «Обновить», а затем снова редактировать. Это не сработало. Однако то, что я действительно хочу, это решение на стороне клиента. Я думаю, что это должно работать, и событие на флажке должно фактически включить раскрывающийся список, я не думаю, что раскрывающийся список может прослушивать флажок, который нужно проверить. Однако я не знаю, как ссылаться на элемент управления из другого элемента управления в коде asp. Так что, возможно, я бы сказал что-то вроде OnCheckChanged = if Checked then ddl.enabled = true?
Но я не уверен, как это написать, и я не знаю, могу ли я заставить это событие флажка оцениваться на стороне клиента.
@Tim - я пробовал это:
в событии rowdatabound:
CheckBox chk = e.Row.FindControl("checkbox1") as CheckBox;
DropDownList ddl = e.Row.FindControl("dropdownlist1") as DropDownList;
chk.Attributes.Add("onclick", "document.getElementById('" + ddl.ClientID + "').enabled = this.checked;");
Когда я нажимаю «Изменить», этот код ДЕЙСТВИТЕЛЬНО попадает, поэтому событие onclick добавляется к флажку. Но когда я устанавливаю флажок, выпадающий список не включается.
Спасибо, Тим! Это рабочее решение.
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)\
{
if ((row.RowType == DataControlRowType.DataRow) && ((row.RowState & DataControlRowState.Edit) > 0))
CheckBox chk = e.Row.FindControl("checkbox1") as CheckBox;
DropDownList ddl = e.Row.FindControl("dropdownlist1") as DropDownList;
chk.Attributes.Add("onclick", "document.getElementById('" + ddl.ClientID + "').disabled = !this.checked;");
}