2012-11-27 28 views
0

我有一個RowDataBound事件處理程序看起來像這樣:的RowDataBound DropDownList的

Public Sub CustomersGridView_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles GVHistoricNames.RowDataBound 'RowDataBound 
    If e.Row.RowType = DataControlRowType.DataRow Then 
     Dim hyperlinkUSNHyperlink As HyperLink = CType(e.Row.FindControl("USNHyperlink"), HyperLink) 
     Dim ddl As DropDownList = CType(e.Row.FindControl("ddlUsercode"), DropDownList) 
     If ddl.SelectedValue = "" Then 'labLastUserCode.Text = "" Then 
      hyperlinkUSNHyperlink.NavigateUrl = "" 
     End If 
    End If 
End Sub 

...和RowCreated事件處理程序看起來像這樣:

Public Sub CustomersGridView_RowCreated(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles GVHistoricNames.RowCreated 'RowDataBound 
    If e.Row.RowType = DataControlRowType.DataRow Then 
     Dim ddl As DropDownList = CType(e.Row.FindControl("ddlUsercode"), DropDownList) 
     ddl.Items.Add("") 
     ddl.Items.Add(strUserName) 
    End If 
End Sub 

...和RowUpdating事件看起來像這樣的處理器:

Protected Sub GVHistoricNames_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GVClearcoreHistoricNames.RowUpdating 
    Try 
     Dim ddl As DropDownList = CType(GVHistoricNames.Rows(e.RowIndex).FindControl("ddlUsercode"), DropDownList) 
     SQLHistoricNames.UpdateParameters("UserCode").DefaultValue = ddl.SelectedValue 

    Catch ex As Exception 

    Finally 

    End Try 
End Sub 

請看第3行RowUpdating事件處理程序。因爲RowDataBound事件處理程序的RowUpdating事件處理程序後調用SelectedValue屬性的值是永遠正確的。我如何訪問SelectedValue?我想將其設置爲更新參數。

回答

1

一種方式可能是考慮實際的請求數據。例如,在GVHistoricNames_RowUpdating代碼,使用

Dim ddl As DropDownList = CType(GVHistoricNames.Rows(e.RowIndex).FindControl("ddlUsercode"), DropDownList) 
SQLHistoricNames.UpdateParameters("UserCode").DefaultValue = Request(ddl.UiniqueID) 

我經常使用這樣的變通當需要控制值之前後數據可以被加載到控制(或當控件被添加/在稍後事件動態綁定) 。

EDIT

ASP.NET使用Control.UniqueId以表示相應的HTML元素的名稱屬性。它(以及客戶端ID)通常被通過添加控件的ID給父母(父被命名容器)的唯一ID構建的,因此你會得到多個下拉列表不同的唯一ID(和客戶端ID)的網格(因爲每一行作爲一個命名容器)

至於你的問題的話,你很可能產生在設計時模板下拉列表中,而你是載入中創建的行列表項。然而,在被觸發行創建的事件,在下拉列表將已經被添加到頁面控件樹和POST事件將已經被處理。在這種情況下,當時下拉列表中將沒有項目來設置選擇。因此,這個問題。

+0

什麼是ddl.UIniqueID? GridView中的每一行都有一個下拉列表。 – w0051977

+0

非常感謝。這已經成功了。我希望我可以多次讚揚這個答案!你能解釋爲什麼上面的行爲不會發生,如果我聲明ASPX文件中的下拉列表項而不是後面的代碼? – w0051977

+0

@ w0051977,請在答案中查看我的編輯內容以瞭解您的疑惑!順便說一句,而不是兩次投票,你可以通過點擊投票箭頭下面的勾號來標記答案。 – VinayC