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

Как прописть ItemTemplate y TemplateColumn в коде

28.10.2008, 13:22. Показов 1820. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Уважаемые,
В моем web DataGrid есть TemplateColumn у которой в качестве ItemTemplate идет usercontrol представляющий собой Label. Хотелось бы чтобы Label.Text генерировался на лету и получал данные из DataSource родительского DataGrid. Если бы не нужно было бы генерить TemplateColumn в коде, то можно было бы просто написать:
HTML5
1
2
3
4
5
<ItemTemplate>
                  <asp:Label
                       Text='<%# DataBinder.Eval(Container.DataItem, 'Tax') %>'
                       runat='server'/>
</ItemTemplate>
но мне нужно в коде usercontrol заставить генериться Label.Text на лету. Облазил массу сайтов по ASP.NET, но там все похожее на приведенный html. Может кто знает как?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.10.2008, 13:22
Ответы с готовыми решениями:

Как в RunTime сделать невидимым TemplateColumn?
Есть DataGrid которая представлена набором столбцов TemlateColumn. Как во время выполнения...

Как привязаться из ItemTemplate к свойству DataContext
Возможно нубский вопрос, но поиск увы не помог. Например, DataContext котрола установлен на объект...

Как отменить запуск анимации в Style.ItemTemplate
Здравствуйте. Стоит такая задача: создается ListBox на основании шаблона из ResourceDictionary: ...

Как забиндить данные ListView.ItemTemplate используя Binding, а не x:Bind
Так работает: &lt;ListView.ItemTemplate&gt; &lt;DataTemplate...

3
hellraiser
18.12.2008, 10:38 2
у меня таже проблема там вроде для таких целей есть метод TemplateColumn.ItemTemplate.InstantiateIn, но я немогу разобрать как с ним работать, при прямом занесении в процесе выполнения выдаеьтя ошибка, а делаю я это так

C#
1
2
3
4
5
6
TemplateColumn temp_column = new TemplateColumn();
Label data_field_label = new Label();
 
data_field_label.Text = i.ColumnName;
                
temp_column.ItemTemplate.InstantiateIn (data_field_label);
но как я уже писал чегото неработает, может ты как нибудь это уже решил, скажи плз.
0 / 0 / 0
Регистрация: 09.06.2008
Сообщений: 51
18.12.2008, 10:49  [ТС] 3
сначала создай такой класс:

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
28
29
30
31
32
33
34
35
using System;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;
 
namespace SupportSystem
{
    /// <summary>
    /// Summary description for CTemplateColumn.
    /// </summary>
    public class CTemplateColumn:ITemplate
    {
        private string colname;
 
        // Constructor
        public CTemplateColumn(string name)
        {
            colname = name;
        }
 
        public void InstantiateIn(Control container)
        {
            LiteralControl l = new LiteralControl();
            l.DataBinding += new EventHandler(this.onDataBinding);
            container.Controls.Add(l);
        }
 
        public void onDataBinding(object sender, EventArgs e)
        {
            LiteralControl l = (LiteralControl) sender;
            DataGridItem container = (DataGridItem) l.NamingContainer;
            l.Text = ((DataRowView)container.DataItem)[colname].ToString();
        }
    }
}
потом при создании колонки пропиши примерно так:

C#
1
2
3
4
5
6
7
// Set staff name column
TemplateColumn colStaffName = new TemplateColumn();
colStaffName.ItemTemplate = new CTemplateColumn('staffname');
colStaffName.EditItemTemplate = Page.LoadTemplate('StaffList.ascx');
colStaffName.HeaderText = 'Staff Name';
colStaffName.ItemStyle.Width = 130;
dgrContracts.Columns.Add(colStaffName);
где StaffList.ascx - это контрол который будет появлятся при редактировании. работает - проверено.
0
hellraiser
18.12.2008, 11:30 4
Большое спасибо, все работает. Еще один вопрос, а как в этом template, обработать форматирование l, т.е. если у поля тип например DateTime, то применить какленибудь форматировани если другой то поступить иначе. Это возможно вообще или стоит просто написать еще один template и при инициализации применять тот или иной. Как лучше?
И еще если можно и нежалко пришлите еще мне исходник StaffList.ascx.
Мое мыло Sergey.Prudnikov@fumogilev.gov.by Заранее благодарен.
18.12.2008, 11:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.12.2008, 11:30
Помогаю со студенческими работами здесь

LisBox.ItemTemplate Focus
Очень прошу помочь. Сломал голову. Казалось бы задача элементарная, но никак не могу решить....

Несколько ItemTemplate для ListBox
Возможно ли прописать для одного ListBox несколько ItemTemplate и выбирать тот или иной способ...

Listbox.ItemTemplate позиционирование элементов
Здравствуйте. Не могу разместить картинку с права, пробовал разные варианты но к правому краю...

Найти элемент управления в ListView.ItemTemplate
Хелоу ворд. Кто нибудь знает как найти например CheckBoxList находящийся в ItemTemlate? Как к...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru