2009-06-17 34 views
1

首先,我意識到大多數情況下也可以使用ItemTemplates來完成。如果我試圖做的只是不可能的,我會考慮使用它們。沒有在RowCommand事件上註冊任何控件的GridView單元

這裏是我的困境的基礎:

我有是在代碼隱藏加載ASPX頁面一個GridView。每行都包含幾個觸發OnRowCommand事件的按鈕。當有人點擊「編輯」按鈕時,我創建一個TextBox對象並將其添加到特定單元格的Controls集合中。

這工作正常。

問題是,當用戶單擊「保存」按鈕時,OnRowCommand被再次觸發,但單元格在Controls集合中註冊了0個項目。我很確定這是在PostBack之前發生的,所以我不確定爲什麼我不能訪問TextBox控件。

我最初添加文本框後檢查,它顯示單元格中的1控制。在將頁面加載到文本框並單擊按鈕之間的某處,這些控件已經丟失。谷歌沒有太多的幫助。有任何想法嗎?

回答

1

要動態創建文本框,所以你必須在每個崗位網格重新綁定回來,給你的文本框和ID(總是相同),並重新連接任何事件處理程序。

+0

我沒有意識到控件在回發中丟失了。結束時只是從'Request.Form'對象獲取我想要的值。仍然希望在不爲所有內容創建TemplateField的情況下延長控件的使用壽命。 – beardog 2009-06-17 14:44:02

1

當用戶單擊編輯按鈕時,您處於GridView的編輯模式。你還需要設置它?

1

如果您正在創建控件,它們將始終在回發中消失,這意味着您將不得不在每個循環中繼續創建它們。

我個人建議堅持使用ItemTemplates,並讓自己從這些所能提供的頭痛中解脫出來。

1

當您在代碼後面創建按鈕時,您可以使用委託創建一個附加程序。處理程序將在rowcommand之前觸發。

Protected Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated 

Dim btnsave As New ImageButton 
If e.Row.RowType <> DataControlRowType.Pager And e.Row.RowType <> DataControlRowType.Header Then 
    AddHandler btnedit.Click, AddressOf btnedit_Click 
    GridView1.Rows(i).Cells(8).Controls.Add(btndel) 
end if 

end sub 

Public Delegate Sub ImageClickEventHandler(ByVal sender As Object, ByVal e As ImageClickEventArgs) 
Sub btnedit_Click(ByVal sender As Object, ByVal e As ImageClickEventArgs) 

//do whatever you want here. 
//possibly a redirect to the current page so nothing else fires 

end sub 
+0

我欣賞代碼示例,但我最終得到了另一種解決方案。謝謝。 – beardog 2009-06-17 14:47:13

相關問題