我有一个带有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;");
}
@tim - 酷。我将把它翻译成C#并尝试一下。虽然我是否也可以在asp.net代码中执行类似onclick = document.getElementById(“MyDropdownlistID.ClientID”)。enabled = this.checked;“)的权限? – kralco626 2010-09-01 12:11:23
@ kralco626:可能是clientid尚未设置RowCreated-Event。但是也许你可以使用RowDataBound来代替(认为这个属性保存在ViewState中,不是吗?)。那里的ClientID属性应该是final的。 – 2010-09-01 12:22:11
@Tim - ya让我试试。说它没有工作,这可能是为什么 – kralco626 2010-09-01 12:24:17