1

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

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 %>

任何帮助/想法如何使这个类型化网格成为通用类型化网格?

是我发现的,看起来有点复杂。这是正确和唯一的方法吗?我不想像在链接中那样在属性中传递类型。相反,我将通过从泛型类派生来创建我的具体类。

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

添加:它是 ASP.NET 2.0 WebForms

4

1 回答 1

0

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

[TemplateContainer(typeof(MyUserGrid.MyContainer))]

它不是那么整洁,但对于我的使用来说仍然足够通用。但是,如果您有更好的解决方案,请随时发表评论。

于 2011-06-02T17:51:53.203 回答