2010-09-01 63 views
0

我有一个带有cheackbox和下拉菜单的gridview。动态启用GridView中的ASP.net按钮基于GridView中的另一个控件

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

在gridview的编辑模式下,当用户点击复选框时,我希望启用下拉菜单。如果我可以做这个客户端,这将是非常棒的,如果没有,我想做它的服务器端,而不必点击更新,然后再次编辑。

This is in C#

Thanks!

我的尝试:

的grdiview是基于关闭数据源的,所以最初我试图立足下拉列表中已启用的值off复选框datavalue的数据评估和演示的。然而,这需要检查框,点击更新,然后编辑要启用ddl。然后,我想可能autopostback会让所有的用户不必点击更新然后再次编辑。这没有奏效。然而,我真的希望它是一个客户端解决方案。我认为它必须工作的方式是,并且复选框上的事件必须实际启用下拉列表,我不认为下拉列表可以侦听复选框以进行检查。不过,我不知道如何从asp代码中的另一个控件引用一个控件。所以也许我会说一些像OnCheckChanged = if Checked then ddl.enabled = true?但我不知道如何写这个,我不知道我可以强制复选框的事件被评估客户端。在RowDataBound事件

: -

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

当我点击编辑这段代码被打到所以onclick事件越来越添加托特他复选框。但是当我点击复选框时,下拉列表不会被启用。

谢谢Tim!这是工作解决方案。

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

回答

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 
+0

@tim - 酷。我将把它翻译成C#并尝试一下。虽然我是否也可以在asp.net代码中执行类似onclick = document.getElementById(“MyDropdownlistID.ClientID”)。enabled = this.checked;“)的权限? – kralco626 2010-09-01 12:11:23

+0

@ kralco626:可能是clientid尚未设置RowCreated-Event。但是也许你可以使用RowDataBound来代替(认为这个属性保存在ViewState中,不是吗?)。那里的ClientID属性应该是final的。 – 2010-09-01 12:22:11

+0

@Tim - ya让我试试。说它没有工作,这可能是为什么 – kralco626 2010-09-01 12:24:17