数据绑定和动态TabPanel创建

时间:2010-02-09 17:43:43

标签: c# asp.net asp.net-2.0 tabcontainer

我当前的任务是一个ASP.NET页面,用于显示数据对象的内容。该对象的属性之一是命名列表的列表。为了不透明,我们称之为Company,它有一个命名位置列表,每个位置都与(仅)一个员工列表相关联。

如果重要,Company将此属性实现如下:

IDictionary<string, IList<Employee>> mEmployeesByLocation;

这些列表中的每一个都可以非常轻松地显示在GridView.我认为我想要的是将整个内容放在TabContainer中并且包含每个网格的单独TabPanel。选项卡和网格将彼此相同,每个选项卡的名称将是关联的字典键。

这样做有好办法吗?

我的第一个想法是使用Repeater,但你不能把它放在TabContainer里面。解析器不知道该怎么做。

因此,看起来我必须以编程方式创建选项卡。很公平。如果可能的话,我想避免必须创建单独的网格控件并以编程方式分配所有属性。

我得到的一个建议是继承TabPanel并使其像用户控件一样工作,包含GridView并知道如何将数据绑定传递给它。不过,我不知道该怎么做,或者它是否会起作用。我知道如何对一个控件进行子类化,但我认为某些东西都不能像TabPanel一样包含像用户控件那样的控件。

思考?输入?更好的想法?

2 个答案:

答案 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中的错误,这整个想法最终被丢弃了。在我使用的工具包版本中,控件无法在回发中正确处理动态创建的选项卡。

问题似乎出现在LoadControlStateActiveTabIndex属性中。加载状态时,容器会天真地尝试将选项卡索引设置为之前的状态。由于尚未在LoadControlState时创建动态选项卡,因此加载的索引可能无效。在这种情况下,该属性会抛出ArgumentOutOfRangeException并且包含的​​页面会爆炸。

(我确实找到了一个部分的解决方法,但它会阻止LoadControlState完全工作,并且因为太难看而烦恼。)

由于复杂的办公室政策原因,我不得升级或修改我的AjaxControlToolkit版本,但对于有此错误的其他人来说,它显然已于去年6月修复:
http://www.codeplex.com/AjaxControlToolkit/WorkItem/View.aspx?WorkItemId=15658