我当前的任务是一个ASP.NET页面,用于显示数据对象的内容。该对象的属性之一是命名列表的列表。为了不透明,我们称之为Company
,它有一个命名位置列表,每个位置都与(仅)一个员工列表相关联。
如果重要,Company
将此属性实现如下:
IDictionary<string, IList<Employee>> mEmployeesByLocation;
这些列表中的每一个都可以非常轻松地显示在GridView.
我认为我想要的是将整个内容放在TabContainer
中并且包含每个网格的单独TabPanel
。选项卡和网格将彼此相同,每个选项卡的名称将是关联的字典键。
这样做有好办法吗?
我的第一个想法是使用Repeater
,但你不能把它放在TabContainer
里面。解析器不知道该怎么做。
因此,看起来我必须以编程方式创建选项卡。很公平。如果可能的话,我想避免必须创建单独的网格控件并以编程方式分配所有属性。
我得到的一个建议是继承TabPanel
并使其像用户控件一样工作,包含GridView
并知道如何将数据绑定传递给它。不过,我不知道该怎么做,或者它是否会起作用。我知道如何对一个控件进行子类化,但我认为某些东西都不能像TabPanel
一样包含像用户控件那样的控件。
思考?输入?更好的想法?
答案 0 :(得分: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。
答案 1 :(得分:0)
由于TabContainer
中的错误,这整个想法最终被丢弃了。在我使用的工具包版本中,控件无法在回发中正确处理动态创建的选项卡。
问题似乎出现在LoadControlState
和ActiveTabIndex
属性中。加载状态时,容器会天真地尝试将选项卡索引设置为之前的状态。由于尚未在LoadControlState
时创建动态选项卡,因此加载的索引可能无效。在这种情况下,该属性会抛出ArgumentOutOfRangeException
并且包含的页面会爆炸。
(我确实找到了一个部分的解决方法,但它会阻止LoadControlState
完全工作,并且因为太难看而烦恼。)
由于复杂的办公室政策原因,我不得升级或修改我的AjaxControlToolkit版本,但对于有此错误的其他人来说,它显然已于去年6月修复:
http://www.codeplex.com/AjaxControlToolkit/WorkItem/View.aspx?WorkItemId=15658