2010-02-09 107 views
1

我目前的任務是一個ASP.NET頁面來顯示數據對象的內容。該對象的其中一個屬性是已命名列表的列表。爲了不透明的緣故,我們把它稱爲Company,它有一個命名位置列表,每個位置都與(僅)員工列表相關聯。數據綁定和動態TabPanel創建

如果它的事項,Company具有這個屬性,像這樣實現的:

IDictionary<string, IList<Employee>> mEmployeesByLocation; 

每個名單中都可以顯示在GridView.很容易我想我要的是把整個事情的TabContainer和有一個單獨的TabPanel包含每個網格。選項卡和網格將相互相同,每個選項卡的名稱將是關聯的字典鍵。

有沒有很好的方法來做到這一點?

我的第一個想法是使用Repeater,但不能將其中一個放入TabContainer。解析器不知道該如何處理它。

所以,看起來我必須以編程方式創建選項卡。很公平。如果可能的話,我想避免也要創建單獨的網格控件並以編程方式指定它們的所有屬性。

我得到的一個建議是子類TabPanel並使其像用戶控件一樣工作,其中包含GridView並知道如何將數據綁定傳遞給它。不過,我不知道該怎麼做,或者甚至可以工作。我知道如何對控件進行子類化,但我不認爲某些東西可以像TabPanel一樣行爲幷包含像用戶控件一樣的控件。

想法?輸入?更好的想法?

回答

0

由於TabContainer中的錯誤,這個整個想法最終被丟棄。在我堅持使用的工具包版本中,控件無法正確處理跨回發的動態創建的選項卡。

該問題似乎出現在LoadControlStateActiveTabIndex屬性中。當狀態被加載時,容器天真地嘗試將標籤索引設置爲之前的任何內容。由於在LoadControlState時尚未創建動態選項卡,因此加載的索引可能無效。在這種情況下,財產拋出ArgumentOutOfRangeException和包含頁面炸燬。

(我確實找到了一個部分解決方法,但它可以防止LoadControlState無法正常工作,並且由於太難以打擾而無法工作。)

由於複雜的辦公室政策的原因,我不能升級或修改我的版本AjaxControlToolkit的,但對於其他人誰擁有這個錯誤,它顯然是固定在去年6月的:
http://www.codeplex.com/AjaxControlToolkit/WorkItem/View.aspx?WorkItemId=15658

0

沒有內置的支持此控件;即在第三方控件中,但不在AJAX控件工具包中。您將不得不以編程方式加載選項卡,並且如果網格非常接近,請使用具有網格的用戶控件(可以通過LoadControl方法加載用戶控件,如http://aspalliance.com/565_Dynamic_Loading_of_ASPNET_User_Controls)。

這樣,你可以編程創建UI。您必須意識到,您可能需要在每次加載頁面時重新創建UI(更多信息請參見:http://www.asp.net/(S(wnmvzu45umnszm455c1qs522))/learn/ajax-videos/video-286.aspx)。動態控件不會在頁面回傳中保留。我不知道如果選項卡將被保留。

HTH。