Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Картинку в Грид, помогите ... еще раз :) 
:(
    Опции темы
max-anikin
Дата 24.11.2004, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 23.11.2004

Репутация: нет
Всего: 1



Значит мне необходимо создать столбец DataGridColumn или его потомка smile ... и чтобы этот столбец содержал в себе каринку ... Можно ли так сделать вообще ? или сразу чего-то иное делать ? Я тут начал пытаться с помощью TemplateColumn это реализовать - но что-то не выходит ... smile На Asp.Net C# ... Помогите плиз ... smile

Это сообщение отредактировал(а) max-anikin - 24.11.2004, 16:36
PM MAIL ICQ   Вверх
[Last]Wizard
Дата 24.11.2004, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 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-вид страницы и добавляешь такие строки:
Код
<asp:DataGrid id="DataGrid1" runat="server">
   <Columns>
       ...
       <asp:TemplateColumn>
           <ItemTemplate>
               <asp:Image id="Image1" runat="server" ImageUrl="..."></asp:Image>
           </ItemTemplate>
       </asp:TemplateColumn>
       ...
   </Columns>
</asp:DataGrid>


3. Программно.

Нужно обработать событие DataGrid.ItemCreated:
Код
private void DataGrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
   if((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
   {
       e.Item.Cells[0].Text = "<img src=\'images\\picture.gif\' />";
   }
}


4. У третьего пункта один недостаток - объект Image не создается на сервере. Поэтому следующий способ - програмное создание шаблона.

Создаем класс, производный от ITemplate:
Код
public class ImageTemplate : ITemplate
{
   protected System.Web.UI.WebControls.Image img;

   public EditFileTemplate()
   {
       img = new Image();
       // установка свойств
   }

   public void InstantiateIn(Control container)
   {
       container.Controls.Add(img);
   }

   public Image image
   {
       get
       {
            return img;
       }
   }
}

Программно создаем соответствующий столбец (пишем в Page_Load или там, где создается DataGrid)
Код
TemplateColumn imgColumn = new TemplateColumn();
imgColumn.ItemTemplate = new ImageTemplate();
imgColumn.HeaderText = "Image";
imgColumn.Visible = true;
dataGrid1.Columns.Add(imgColumn);


Больше способов я не знаю smile

Это сообщение отредактировал(а) [Last]Wizard - 24.11.2004, 17:27
PM ICQ   Вверх
max-anikin
Дата 24.11.2004, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 23.11.2004

Репутация: нет
Всего: 1



Спасибо - последний способ то что нужно ... smile там конечно немножко помучатся надо чтобы брать ImageUrl из DataSource грида и чтоб оно для каждой строки грузила картинку - но думаю справлюсь ... smile Тут у меня еще пара вопросов - если не найду в темах ... Скоро буду спрашивать smile
PM MAIL ICQ   Вверх
[Last]Wizard
Дата 24.11.2004, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.7.2004
Где: Минск, Беларусь

Репутация: 1
Всего: 10



Спрашивай, спрашивай...
Постараемся ответить smile
PM ICQ   Вверх
max-anikin
Дата 1.12.2004, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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.йпг" надо подставить то - что было получено в результате запроса ... может мне такой вариант не подходит ... хотя очень понравился smile
пришлось сделать обработку:
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. Но мне так крайне не нравится! И еще получается каждый раз при вызове ИнстанцеИн необходимо создавать новый контрол - иначе он вставляет один - в последнюю строку грида smile

Это сообщение отредактировал(а) max-anikin - 1.12.2004, 17:25
PM MAIL ICQ   Вверх
[Last]Wizard
Дата 2.12.2004, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.7.2004
Где: Минск, Беларусь

Репутация: 1
Всего: 10



Не все так сложно smile
Хотя Item_Bound обрабатывать придется.

Код
prоtected virtual void Item_Bound(Object sender, DataGridItemEventArgs e)
{
   if(e.Item.ItemIndex >= 0)
   {
       for(int i=0; i<TCIndexes.Count; i++)
       {
           // "imgID" - строка, присвоеная в InstantiateIn(...) свойству ID
           Image img = (Image)e.Item.Cells[i].FindControl("imgID");
           FieldName = ... // имя столбца в DataView
           img.ImageUrl = ImageFolder + DataBinder.Eval(e.Item.DataItem, FieldName, "\\{0}");
       }
   }
}


PS. Обрати внимание, здесь на форме ответа есть такая кнопка "Код". Она позволяет отформатировать текст как код с подсветкой синтаксиса. Так сказать и людям легче читать и модераторы не зря же старались. smile
PM ICQ   Вверх
max-anikin
Дата 2.12.2004, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 23.11.2004

Репутация: нет
Всего: 1



Я так и попытался сделать ... но прикол в том что ItemBound срабатывает после InstantiateIn шаблона ... smile ... и ведь шаблон нужен то был как раз для того - чтобы уйти от ItemBound smile ... тут мне как бы нужно создать новый столбец и новый интерфейс - который бы вместе с
Control container передавал бы данные полученный запросом для каждой строчки ... а вот как это сделать - нигде не нашел ... может у кого-нить есть хоть какой-нить пример ?? smile ... сорри за плохое форматирование - я исправлюсь smile

Это сообщение отредактировал(а) max-anikin - 2.12.2004, 17:51
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0652 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.