Универсальный - типизированный элемент управления CompositeDataBound - PullRequest
1 голос
/ 01 июня 2011

У меня есть составной элемент управления DataBound: MyGrid с MyItemTemplate с контейнером MyContainer.У меня есть класс 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 %>

Любая помощь / идеи, как превратить эту типизированную сетку в универсальную типизированную сетку?* Это - это то, что я нашел, и выглядит довольно сложно.Это правильный и единственный путь?Я не хочу передавать тип в свойстве, как в ссылке.Вместо этого я буду создавать свой конкретный класс, производный от универсального класса.

Моя попытка постоянно выдаёт мне эту ошибку: Invalid expression term '>'

Добавить: Это ASP.NET 2.0 WebForms

1 Ответ

0 голосов
/ 02 июня 2011

Я изменил класс MyGrid на абстрактный класс MyGrid и также сделал свойство ITemplate абстрактным.Затем в моем конкретном производном классе MyUserGrid: MyGrid я реализовал свойство ITemplate с атрибутом TemplateContainer, например:

[TemplateContainer(typeof(MyUserGrid.MyContainer))]

Это не очень аккуратно, но все же достаточно хорошо для моего использования.Но не стесняйтесь комментировать, если у вас есть лучшее решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...