通用 - 类型的CompositeDataBound控件

时间:2011-06-01 17:01:01

标签: c# asp.net custom-server-controls databound-controls

我有一个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

1 个答案:

答案 0 :(得分:0)

我将类MyGrid更改为抽象的MyGrid类,并将ITemplate属性设置为abstract。然后在我的具体派生类MyUserGrid:MyGrid中,我使用TemplateContainer属性实现了ITemplate属性,如:

[TemplateContainer(typeof(MyUserGrid.MyContainer))]

这不是那么整洁,但仍然足够通用我的用法。但如果您有更好的解决方案,请随意评论。

相关问题