2010-09-01 66 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