2011-06-01 67 views
1

我有一个compositeDatabound控件:MyGrid,MyItemTemplate和MyContainer容器。 我有一个类的用户。泛型复合数据绑定控件

public class MyGrid: CompositeDataBoundControl 
{ 
    [TemplateContainer(typeof(MyGrid.MyContainer))] 
    public ITemplate MyItemTemplate 
    { 
    //get;set; 
    } 
    public class MyContainer: Control, INamingContainer 
    { 
    //return DataItem of type User 
    } 
    //rest of all code 
} 

这可以帮助我使用:<%# Container.DataItem.FirstName %>其中FirstName是用户类中的一个属性。

现在我想使它成为一个通用的网格即MyGrid<T>

所以我要修改我TemplateContainer以及这样的:

[TemplateContainer(typeof(MyGrid<>.MyContainer))] 

的MyGrid类编译罚款没有任何错误:我创建了一个具体类即

MyUserGrid: MyGrid<User>它编译也很好。但这不是ASP.NET所喜欢的。我指的是类本身编译没有错误,但我可以不再使用:

<%# Container.DataItem.User.FirstName %>

任何帮助/想法如何使这一类型化的网格,以通用类型化的电网?

This是我发现的东西,看起来很复杂。这是唯一的方法吗?我不想在链接中传递类型。相反,我将通过派生一个泛型类来创建我的具体类。

我尝试不断给我这个错误:Invalid expression term '>'

补充:这是ASP.NET 2.0 Web窗体

回答

0

我改变了类MyGrid一个抽象类MyGrid并取得了Itemplate属性抽象为好。然后在我的具体的派生类MyUserGrid:MyGrid我实现与TemplateContainer的了Itemplate财产属性,如:

[TemplateContainer(typeof(MyUserGrid.MyContainer))] 

这是不是很方便,但仍然不够好一般我使用。但如果您有更好的解决方案,请随时留言。