1

私はcompositeDataboundコントロールを持っています:MyContainerのコンテナを持つMyItemTemplateを持つMyGrid。クラス User があります。

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

この Typed Grid を Generic Typed Grid にする方法についてのヘルプ/アイデアはありますか?

これは私が見つけたもので、ちょっと複雑に見えます。それが正しい唯一の方法ですか?リンクのようにプロパティにタイプを渡したくありません。代わりに、ジェネリック クラスから派生させて具象クラスを作成します。

私の試みは私にこのエラーを与え続けます: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 に答える