Форум программистов, компьютерный форум, киберфорум
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 4

Как правильно сделать шаблонный серверный контрол с привязкой к данным?

21.02.2011, 00:00. Показов 1675. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Идея:
шаблонный элемент, в котором можно использовать синтаксис вида <%# Contaner.Name %>.

Создаю класс для шаблонного контейнера, чтобы он представлял мне свойство Name.
C#
1
2
3
4
5
6
7
8
9
10
11
12
    public class DTVItem : WebControl, INamingContainer
    {
        string name;
        public string Name
        {
            get { return name; }
        }
        public DTVItem(string dtvname)
        {
            name = dtvname;
        }
    }
Далее внутри класса моего шаблонного контрола описываю код шаблона ItemTemplate и затем в методе PerformDataBinding() добавляю экземпляр шаблонного контейнера. Еще переопределяю метод DataBinding() для гарантии создания всех контейнеров шаблонов:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    public class DataTreeView : DataBoundControl, INamingContainer
    {
        ...
        private ITemplate itemTemplate;
        [TemplateContainer(typeof(DTVItem))]
        public ITemplate ItemTemplate
        {
            get { return itemTemplate; }
            set { itemTemplate = value; }
        }
        ...
    protected override void PerformDataBinding(IEnumerable retrievedData)
    {
        ...
       DTVItem container = new DTVItem(VarName);
       itemTemplate.InstantiateIn(container);
       this.Controls.Add(container);
       ...       
    }
       ...
        public override void DataBind()
        {
            EnsureChildControls();
            base.DataBind();
        }
        ...
    }
Собираю контрол в DLL-ку, подключаю.

В CS-файле пишу:
C#
1
2
3
4
        protected void Page_Load(object sender, EventArgs e)
        {
            Page.DataBind();
        }
В ASPX-файле пишу:
HTML5
1
2
3
4
5
            <sample:DataTreeView ID="dat" runat="server" DataSourceID="SqlDataSource1">
              <ItemTemplate>
                  <b>Имя:<%# Container.Name %></b>
              </ItemTemplate>
            </sample:DataTreeView>
И не работает. Пишет только "Имя:", а вот данные не привязывает.
Подскажите, пожалуйста, в чем может быть мой промах?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.02.2011, 00:00
Ответы с готовыми решениями:

Можно ли программно разместить серверный контрол?
Пардон, за странный вопрос. Может это меня лукавый путает... :-) Можно ли серверные контролы размещать на странице при помощи...

Как правильно сделать запрос к вложенным данным?
есть такая структура : нужно из нее выбрать только totals где point =2.5 Добавлено через 2 часа 6 минут никто не подскажет?

Как правильно заземлить серверный шкаф?
Дано: обычная комната (не серверная). В ней стоит серверный шкаф, который нужно заземлить. Розетки в комнате евро стандарта (с усиками...

6
Padawan
 Аватар для Johnny_D
473 / 323 / 30
Регистрация: 30.01.2010
Сообщений: 1,841
21.02.2011, 10:36
XeaL, во-первых необходимо привести твой контейнер к нужному типу :
C#
1
((DTVItem)Container).Name
Собственно, поэтому то и не рекомендую юзать свойства, созвучные со встроенными.
А во-вторых для дерева необходимо отдельно определить DisplayMember и ValueMember(это не обязательно).
0
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 4
21.02.2011, 11:42  [ТС]
Johnny_D, не совсем понял, для чего эти свойства используются. Поясни, пожалуйста.
0
Padawan
 Аватар для Johnny_D
473 / 323 / 30
Регистрация: 30.01.2010
Сообщений: 1,841
21.02.2011, 16:53
XeaL, используя в Container.Name - ты получает имя объекта, вместо необходимого свойства.
Для того, чтобы получить именно свойство Name, которое заложено в объект типа DTVItem, тебе сначала необходимо указать, чтобы среда обращалась к объекту Container, как к объекту типа DTVItem, а уже после этого извлекать свойство Name.
Блин, сам запутался.
Может тебе будет проще понять, если ты переименуешь свойство Name в скажем NameProperty. И прочтешь ошибку компилятора.
0
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 4
21.02.2011, 19:56  [ТС]
Нашел источник ошибки.
C#
1
public class DataTreeView : DataBoundControl, INamingContainer
если поменять на:
C#
1
public class DataTreeView : WebControl, INamingContainer
то всё с синтаксисом <% %> работает, но естественно не получается реализовать привязку к SQLDataSource.
Непонятно, почему так получается... вроде ж и DataBoundControl наследован от WebControl...
0
Padawan
 Аватар для Johnny_D
473 / 323 / 30
Регистрация: 30.01.2010
Сообщений: 1,841
22.02.2011, 10:25
XeaL, так ты попробовал привести тип контейнера к своему?
0
0 / 0 / 0
Регистрация: 20.02.2011
Сообщений: 4
23.02.2011, 10:26  [ТС]
Не, всё решилось проще (седьмая строка)
C#
1
2
3
4
5
6
7
8
9
    protected override void PerformDataBinding(IEnumerable retrievedData)
    {
        ...
       DTVItem container = new DTVItem(VarName);
       itemTemplate.InstantiateIn(container);
       this.Controls.Add(container);
       container.DataBind();
       ...       
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.02.2011, 10:26
Помогаю со студенческими работами здесь

ComboBox с привязкой к данным
Буду очень благодарен , если кто-то поможет. Проблема такая, у меня есть бд, она подключена к проекту конструктором. Так же...

Как правильно подключить шаблонный класс (VS2008)?
Добрый день! Помогите в подключении шаблонного класса в Visual Studio 2008 Professional. Создал консольный проект,в заголовочном...

Как правильно реализовать подобный контрол?
Добрый день. Есть коллекция объектов. Надо вывести на экран вертикальный список прямоугольных плиток, которые представляют...

как сделать шаблонный предикат?
#include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;list&gt; #include &lt;deque&gt; #include &lt;algorithm&gt; using namespace std; ...

Как сделать ссылку разных столбцов с привязкой названия через выпадающий список?
Добрый день! Проблема заключается в следующем: 1. есть лист общих данных в котором даны результаты по объектам, у каждого объекта один...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru