【发布时间】:2010-09-01 11:59:17
【问题描述】:
我有一个带有复选框和下拉菜单的网格视图。
默认情况下,该复选框未选中。 默认情况下,下拉列表被禁用。
在 gridview 的编辑模式下,当用户单击复选框时,我希望下拉菜单启用。如果我能做这个客户端,那就太棒了,如果不能,我想在服务器端做,而不必点击更新然后再次编辑。
这是在 C# 中
谢谢!
我尝试了什么:
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;");
}
【问题讨论】:
标签: javascript asp.net gridview postback client-server