2010-09-28 52 views
0

一個web部件內處理回傳我初始化一個GridView,文本框,並通過代碼的CreateChildControls一個按鈕,一個web部件()在Sharepoint

以上控件聲明爲類變量,但後來才初始化。

接下來,我給出了按鈕單擊的處理程序。處理函數應該作爲搜索工具 - 對輸入到文本框中的內容執行一些操作,將結果加載到Gridview中,顯示Gridview當我在文本框中鍵入內容並點擊按鈕時,相同的控件再次加載,文本框中輸入的內容將丟失。我試過ViewState()和ViewState(),但無濟於事。網格不顯示,因爲我的邏輯跳過嘗試綁定它,因爲沒有合適的搜索字符串。

我的問題: 1)在哪裏/如何從文本框中獲取值回發? 2)在PreRender()中填充GridView或在PreRender()之後會發生事件處理是否合理?編輯: 似乎事件處理程序不會被調用。

Dim btnClickHandler = New EventHandler(AddressOf SetSearchParameter) 
AddHandler srchBtn.Click, btnClickHandler 

是正確的?

編輯: 我redid所有代碼從0它的工作。

+0

按鈕單擊處理程序也在CreateChildControls() – 2010-09-28 14:53:24

回答

0

您應該能夠引用按鈕單擊事件處理程序中的控件值,具體取決於如何構建它們的靜態/動態。 (textbox)Page.FindControl('controlname')。值在你的事件處理程序中用於點擊按鈕。

呃... this.findcontrol。

即時從內存中這樣做,所以語法可能會關閉。

+0

根據http:// stackoverflow。com/questions/1648447/why-does-onload-createchildcontrols-order-change-at-postback和許多其他資源,CreateChildControls()在Postback事件處理之前調用 - 不會Page.FindControl()調用新控件? 我確實嘗試過,但仍然無法獲取值。 – 2010-09-29 05:02:57

+0

重讀您的評論後,我還沒有使用您用來創建您的事件處理程序的方法。我一直創建我的方法並將click事件綁定到該方法。下面是一個動態創建控件的簡單事件處理程序的代碼示例。 – 2010-09-29 18:00:03

+0

Button submitButton =(Button)this.FindControl(「submit」); submitButton.Click + = new EventHandler(SubmitContactForm); 這裏是方法submitContactForm 保護無效SubmitContactForm(對象發件人,EventArgs的){....} 我用這個方法裏面,我的情況下它是動態的表單字段,我知道了標籤。 //獲取控件名稱 object ctrl = FindControl(controlName); string controlValue =((TextBox)ctrl).Text; – 2010-09-29 18:04:14

1

這總是讓我困惑。我總是參考this question爲了得到它(也是control execution lifecycle)。

  1. 您不應該需要管理viewstate,這應該由您的控件自動處理。

  2. 我會建議使用OnPreRender來填充你的網格。到那時您的控件應該由ViewState填充它們的值。

+0

內完成我已經提到過,但仍然不清楚。檢查我對下一個答案的評論。 1)ViewState甚至用於動態控件? 2)我希望它只能在Postback上綁定 - 可以在OnPreRender中檢查Page.IsPostBack嗎? – 2010-09-29 05:04:17

+0

對於這兩個問題都是。您將在CreateChildControls中添加您的文本框和按鈕。然後,在OnPreRender中,您可以檢查以查看IsPostBack(並且您的textbox.Text有一個值),然後添加您的網格/數據綁定。 – 2010-09-29 13:43:54

+0

好的,謝謝!我現在使用自己的標誌 - 更改Personalizable值也會導致回發,並且在這種情況下可能不會始終設置某些值 – 2010-09-30 05:21:41