我有一个compositeDatabound控件:带MyItemTemplate的MyGrid和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是User Class中的属性。
现在我想把它变成一个通用网格,即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 WebForms
答案 0 :(得分:0)
我将类MyGrid更改为抽象的MyGrid类,并将ITemplate属性设置为abstract。然后在我的具体派生类MyUserGrid:MyGrid中,我使用TemplateContainer属性实现了ITemplate属性,如:
[TemplateContainer(typeof(MyUserGrid.MyContainer))]
这不是那么整洁,但仍然足够通用我的用法。但如果您有更好的解决方案,请随意评论。