我有一个带有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;");
}
答案 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