Динамическое включение кнопки ASP.net в GridView на основе другого элемента управления в GridView - PullRequest
0 голосов
/ 01 сентября 2010

У меня есть сетка с чекбоксом и выпадающим списком.

Флажок по умолчанию не установлен.Раскрывающийся список по умолчанию отключен.

В режиме редактирования вида сетки, когда пользователь нажимает флажок, я хочу, чтобы раскрывающийся список стал активным.Если бы я мог сделать это на стороне клиента, это было бы здорово, если нет, я бы хотел сделать это на стороне сервера, БЕЗ необходимости нажимать кнопку обновления и затем редактировать снова.

Это на C #

Спасибо!

То, что я пробовал:

Grdiview основан на источнике данных, поэтому первоначально я попытался основать включенное значение раскрывающегося списка на данных Evalфлажок datavalue.Однако для этого необходимо установить флажок, нажать кнопку «Обновить», а затем изменить для включения ddl.Тогда я подумал, что, возможно, autopostback позволит всем пользователям не нажимать кнопку «Обновить», а затем редактировать снова.Это не сработало.Однако, что я действительно хочу это решение на стороне клиента.Я думаю, что это должно работать так, и событие на флажке должно фактически включать раскрывающийся список, я не думаю, что раскрывающийся список может прослушивать флажок, который нужно проверить.Однако я не знаю, как ссылаться на элемент управления из другого элемента управления в коде asp.Так что, возможно, я бы сказал что-то вроде OnCheckChanged = if Checked then ddl.enabled = true? Но я не уверен, как это написать, и я не знаю, могу ли я заставить это событие флажка быть оцененным на стороне клиента.

@ Tim - Я пытался это сделать:

в событии, связанном с строкой строки:

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;");

Когда я нажимаю edit, этот код ПОЛУЧИЛСЯ, так что событие 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;");
}

Ответы [ 2 ]

1 голос
/ 01 сентября 2010

Используйте RowDataBound , чтобы добавить клиентское событие к вашему флажку:

   GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
        Select Case e.Row.RowState
            Case DataControlRowState.Edit
                Dim chk As CheckBox = DirectCast(e.Row.FindControl("MyCheckboxID"), CheckBox)
                Dim ddl As DropDownList = DirectCast(e.Row.FindControl("MyDropdownlistID"), DropDownList)
                chk.Attributes.Add("onclick", "document.getElementById('" & ddl.ClientID & "').disabled = ! this.checked;")
        End Select
    End Sub
1 голос
/ 01 сентября 2010

Что вы пробовали до сих пор?Это должно быть легко достигнуто с TemplateField и небольшим JavaScript http://msdn.microsoft.com/en-us/library/ms228046.aspx

...