基于GridView中的另一个控件动态启用GridView中的ASP.net按钮

时间:2010-09-01 11:59:18

标签: javascript asp.net gridview postback client-server

我有一个带有cheackbox和下拉列表的gridview。

默认情况下,未选中该复选框。 默认情况下,下拉列表已禁用。

在gridview的编辑模式下,当用户单击复选框时,我希望下拉列表变为启用状态。如果我可以做这个客户端会很棒,如果不是我想做它服务器端而不必点击更新然后再次编辑。

这是在C#

谢谢!

我尝试了什么:

grdiview基于数据源,所以最初我尝试将下拉列表的启用值基于复选框数据值的数据Eval。但是,这需要选中复选框,单击更新,然后编辑要启用的ddl。然后我想也许autopostback所有用户都不必点击更新,然后再次编辑。这没用。然而我真正想要的是客户端解决方案。我认为它必须工作的方式是复选框上的事件必须实际启用下拉列表,我不认为下拉列表可以监听要检查的复选框。但是我不知道如何在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;");
}

2 个答案:

答案 0 :(得分:1)

到目前为止你尝试了什么?这应该可以通过TemplateField和一些小的javascript轻松完成 http://msdn.microsoft.com/en-us/library/ms228046.aspx

答案 1 :(得分:1)

使用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