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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Трабла с DataGridViewImageColumn, не отображаются картинки 
V
    Опции темы
allknower
  Дата 16.9.2008, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте. У меня вопрос по DataGridView. На форме на одной из страниц TabControl'a лежит экзампляр грида (procMGrid), в нем добавлена колонка DataGridViewImageColumn (Name = PROC_STATUS). В момент выбора этой страницы вызывается следующий код, который получает DataTable и привязывает его к гриду. После чего foreach'ем проходится по строкам и в зависимости от значения колонки PROCESS_TYPE выставляет ту или иную картинку в Image-колонке.

Код

           private void Loadxxxxxx()
           {
            grid.DataSource = Getxxxxxx(); // возвращает DateTable
            grid.Columns["TYPE"].Visible = false;

            foreach (DataGridViewRow row in grid.Rows)
            {
                switch (row.Cells["TYPE"].Value.ToString())
                {
                    case "1":
                        {
                            row.Cells["STATUS"].Value =
                                global::MyNameSpace.Properties.Resources.start;
                        }
                        break;
                    case "0":
                        {
                            row.Cells["STATUS"].Value =
                                global::MyNameSpace.Properties.Resources.stop;
                        }
                        break;
                    default:
                        {
                            row.Cells["STATUS"].Value =
                                global::MyNameSpace.Properties.Resources.unknown;
                        }
                        break;
                }
            }

            grid.Columns["STATUS"].DisplayIndex = grid.Columns["TYPE"].DisplayIndex;
            }


Внимание вопрос: при ПЕРВОМ проходе выполняется все это, по картинок в Image-колонке нет. (value = null)
В результате трейса по коду выяснилось что после выполнения представленного выше кода выполняются накопившиеся в буфере event'ы (такие как RowEnter и т.п.), которые вызываются с "уже не актуальными параметрами" (например в момент привязки датасорса к гриду, генерится событие в момент когда первая строка добавляется. В этот момент grid.Rows.Count = 1, "ImageCol".Value = null.) Может это как то влияет... Как это все можно забороть???
После повторного переключения на эту страницу все отображается нормально.  smile

Зарание спасибо.

Это сообщение отредактировал(а) allknower - 19.9.2008, 08:35
PM MAIL ICQ   Вверх
allknower
  Дата 19.9.2008, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сделал так: в грид добавил все необходимые для отображения колонки (нужных типов) и установил их свойства DataPropertyName.
Далее кинул на форму BindingSource  и код стал таким:

Код

        private void Loadxxxxxx()
        {
            bs.DataSource = Getxxxxxx(); // возвращает DateTable
            grid.AutoGenerateColumns = false;
            grid.DataSource = bs;
        }


Добавил обработчик события CellFormatting(...)
Код

        private void grid_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (e.ColumnIndex == grid.Columns["STATUS"].Index && e.Value != null)
                switch (e.Value.ToString())
                {
                    case "1":
                        {
                            e.Value =
                                global::MyNameSpace.Properties.Resources.start;
                        }
                        break;
                    case "0":
                        {
                            e.Value =
                                global::MyNameSpace.Properties.Resources.stop;
                        }
                        break;
                    default:
                        {
                            e.Value =
                                global::MyNameSpace.Properties.Resources.unknown;
                        }
                        break;
                }
        }


И фсё!!!  smile 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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