2012-06-13 79 views
2

這實際上是一個更一般的問題,但我能想到的唯一方法就是問一個具體的例子。正確使用asp.net webforms生命週期

我們目前有一個web部分,其中SPGridView。現在,在CreateChildControls中創建GV和所有綁定字段,數據被檢索並綁定在OnPreRender中。這些列是靜態的,所以這工作正常。

CreateChildControls{ 
    // create and configure the gridview 
    // create all bound fields and add them to the gridview 
    // add the gridview to the page 
} 

OnPreRender{ 
    // get the data and bind it to the gridview 
} 

現在我們需要將列更改爲依賴於用戶從下拉列表中進行的選擇。在CreateChildControls之內,我們無法從下拉控件獲取值,因此我們無法有條件地添加綁定字段。我的問題是,這裏的最佳做法是什麼?我們可以在CreateChildControls中創建所有可能的綁定字段,然後僅在OnPreRender中向GV添加相應的字段。我們可以將所有綁定字段的創建全部移動到OnPreRender。還有其他很多選擇。

CreateChildControls{ 
    // create and configure the gridview 
    // create ALL bound fields here? 
    // add the gridview to the page 
} 

OnPreRender{ 
    // or maybe create only the applicable bound fields here? 
    // add the appropriate fields to the gridview 
    // get the data and bind it to the gridview 
} 

而且在更廣泛的意義,真正構成了「創造」控制(的CreateChildControls目的)?這個問題真的延伸到可能具有動態內容的任何控制。在哪裏可以將條目添加到下拉列表中,等等。有很多方法可行,但哪個是「正確的」?是否將選擇添加到「創建」控件的下拉部分?它取決於選擇是否動態?

+0

可能不是一個完整的答案,但是這裏有一些在ASP.NET頁面生命週期中從MSDN讀取的_light_。還請注意頁面底部的一些評論,因爲提供了更多信息/評論。編輯:幫助,如果我包含鏈接:http://msdn.microsoft.com/en-us/library/ms178472.aspx –

回答

0

BoundField不是控件,gridview中的Columns集合是狀態管理的,因此您可以在數據綁定控件之前安全地添加PreRender事件中的列。