![]() |
|
Модераторы: gambit, Partizan |
![]()
|
|
| max-anikin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 23.11.2004 Репутация: нет Всего: 1 |
Значит мне необходимо создать столбец DataGridColumn или его потомка
Это сообщение отредактировал(а) max-anikin - 24.11.2004, 16:36 |
|||
|
||||
| [Last]Wizard |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 20.7.2004 Где: Минск, Беларусь Репутация: 1 Всего: 10 |
Есть несколько способов.
1. Самый простой - через TemplateColumn в дизайнере. В DataGrid добавить столбец, сделать его как TemplateColumn. Потом в дизайнере на Гриде кликнуть правой кнопкой -> Edit Template -> Columns[0]. Откроется редактор шаблонов с 4 секциями: Header, Item, EditItem, Footer. Туда, куда надо (ItemTemplate) помещаешь свою картинку. Правая кнопка -> End Template Editing. 2. То же самое, но только вручную. Открываешь HTML-вид страницы и добавляешь такие строки:
3. Программно. Нужно обработать событие DataGrid.ItemCreated:
4. У третьего пункта один недостаток - объект Image не создается на сервере. Поэтому следующий способ - програмное создание шаблона. Создаем класс, производный от ITemplate:
Программно создаем соответствующий столбец (пишем в Page_Load или там, где создается DataGrid)
Больше способов я не знаю Это сообщение отредактировал(а) [Last]Wizard - 24.11.2004, 17:27 |
||||||||
|
|||||||||
| max-anikin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 23.11.2004 Репутация: нет Всего: 1 |
Спасибо - последний способ то что нужно ...
|
|||
|
||||
| [Last]Wizard |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 20.7.2004 Где: Минск, Беларусь Репутация: 1 Всего: 10 |
Спрашивай, спрашивай...
Постараемся ответить |
|||
|
||||
| max-anikin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 23.11.2004 Репутация: нет Всего: 1 |
Сделал так ...
public class ImageTemplate : ITemplate { public string ImageUrl; public string FieldName; public ImageTemplate(string pFieldName) { FieldName = pFieldName; } /// <summary> /// Occurs when Binding Column /// </summary> /// <param name="container">TableCell</param> public void InstantiateIn(Control container) { if(ImageUrl != null) { System.Web.UI.WebControls.Image img = new Image(); img.ImageUrl = SharedClasses.Config.RootUrl + "\\" + ImageUrl; container.Controls.Add(img); } } } Все неплохо - одна маленькая проблема ... Имя картинки получаю запросом и никак не могу передать ее в ИмагеУрл ... и вместо "\\Имагес\\1442.йпг" надо подставить то - что было получено в результате запроса ... может мне такой вариант не подходит ... хотя очень понравился пришлось сделать обработку: prоtected virtual void Item_Bound(Object sender, DataGridItemEventArgs e) { if(e.Item.ItemIndex >= 0) for(int i=0; i<TCIndexes.Count; i++) { DataGridColumn col = (sender as DataGrid).Columns[(int)TCIndexes[i]]; if(col != null && col is TemplateColumn) if((col as TemplateColumn).ItemTemplate is ImageTemplate) { string FieldName = ((col as TemplateColumn).ItemTemplate as ImageTemplate).FieldName; DataView DGSource = ((sender as DataGrid).DataSource as DataView); ((col as TemplateColumn).ItemTemplate as ImageTemplate).ImageUrl = ImageFolder + "\\" + DGSource.Table.Rows[e.Item.ItemIndex][FieldName].ToString(); } } } где TCIndexes[i] - массив - где хранятся индексы столбцов с картинкой ... т.е. лезу в DataSource и оттуда достаю значение полученное запросом и пихаю его в ImageTemplate. Но мне так крайне не нравится! И еще получается каждый раз при вызове ИнстанцеИн необходимо создавать новый контрол - иначе он вставляет один - в последнюю строку грида Это сообщение отредактировал(а) max-anikin - 1.12.2004, 17:25 |
|||
|
||||
| [Last]Wizard |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 20.7.2004 Где: Минск, Беларусь Репутация: 1 Всего: 10 |
Не все так сложно
Хотя Item_Bound обрабатывать придется.
PS. Обрати внимание, здесь на форме ответа есть такая кнопка "Код". Она позволяет отформатировать текст как код с подсветкой синтаксиса. Так сказать и людям легче читать и модераторы не зря же старались. |
|||
|
||||
| max-anikin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 23.11.2004 Репутация: нет Всего: 1 |
Я так и попытался сделать ... но прикол в том что ItemBound срабатывает после InstantiateIn шаблона ...
Control container передавал бы данные полученный запросом для каждой строчки ... а вот как это сделать - нигде не нашел ... может у кого-нить есть хоть какой-нить пример ?? Это сообщение отредактировал(а) max-anikin - 2.12.2004, 17:51 |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |