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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Заливка ячеек в DataGridView 
:(
    Опции темы
tatbesidovska
  Дата 6.5.2008, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Пдскажите, можно лм так сделать???
Есть DataGridView,содержащий несколько столбцов, в них числовые данные, в зависимости, какая дата стоит, нужно сделать заливку. Например дата, стоящая в столбце - 06,04,08, а текущая дата 06,05,08, следовательно ячейку с датой в столбце надо залить красным цветом. Принцип такой, если дата,стоящая в ячейке отстает  на месяц от текущей, значит ячейку залить красным цветом. Заранее спасибо всем.

PM MAIL   Вверх
informatik
Дата 6.5.2008, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Обрабатывай событие CellFormatting и все получится.
--------------------
namespace informatik
PM MAIL   Вверх
tatbesidovska
Дата 6.5.2008, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



а подробнее можно, на примере каком-нить
PM MAIL   Вверх
mr.DUDA
Дата 7.5.2008, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Подписываемся на событие DataGridView.CellPainting, пишем код:
Код
        void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
        {
            if (e.Value is DateTime)
            {
                DateTime date = (DateTime)e.Value;
                if ((DateTime.Now - date).TotalDays > 30)
                {
                    e.Handled = true;
                    e.Graphics.FillRectangle(Brushes.Red, e.CellBounds);
                    e.PaintContent(e.CellBounds);
                }
            }
        }



--------------------
user posted image
PM MAIL WWW   Вверх
tatbesidovska
  Дата 7.5.2008, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Да, супер, все работает, но вопросик такой, как прописать, чтобы только для определенного столбца форматирование работало, например"КонечнаяДата"(это название столбца), заранее спасибо
PM MAIL   Вверх
vponomarov
Дата 7.5.2008, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



можно все намного проще сделать.
подаисываемся на событие CellValueChanged
Код

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            if (!__sc._IsCorrect(dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString())) //замени на свою проверку
                dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor = Color.Red;
            else
                dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor = Color.White;
        }


Цитата(tatbesidovska @  7.5.2008,  12:40 Найти цитируемый пост)
Да, супер, все работает, но вопросик такой, как прописать, чтобы только для определенного столбца форматирование работало, например"КонечнаяДата"(это название столбца), 

если нужно чтобы только для одного столбца работало, то к проверке добавь e.ColumnIndex==номер нужного столбца
если нужно для нескольких, то можно сделать массив номеров столбцов и проверять Contains'ом


--------------------
user posted image
user posted image
PM MAIL ICQ   Вверх
tatbesidovska
  Дата 8.5.2008, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Делаю так:
 
Код

 void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
        {
        if (this.dataGridView1.Columns[e.ColumnIndex].Name == "dataGridViewTextBoxColumn4" && e.Value != null)
            {
                DateTime date = (DateTime)e.Value;
                if ((DateTime.Now - date).TotalDays > 30)
                {
                   e.Handled = true;
                   e.Graphics.FillRectangle(Brushes.OrangeRed, e.CellBounds);
                   e.PaintContent(e.CellBounds);

               }
            }
        }


 выходит ошибка:Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index



Подскажите, в чем проблема???
PM MAIL   Вверх
tatbesidovska
  Дата 12.5.2008, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Кто-нить, подскажите!!!!
PM MAIL   Вверх
informatik
Дата 12.5.2008, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Опять навязываю свой вариант попробуй все таки.... Событие CellFormatting


Код

 private void DataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (this.DataGridView.Columns[e.ColumnIndex].Name == "ColumnName" && e.Value!=null)
            {
                if (e.Value is DateTime)
                {
                    DateTime date = (DateTime)e.Value;
                    if ((DateTime.Now - date).TotalDays < 30)
                    {
                        //e.CellStyle.ForeColor = Color.Red; //Закрасить текст
                        e.CellStyle.BackColor = Color.Red; //Закрасить фон

                    }
                }
            }
        }


Это сообщение отредактировал(а) informatik - 12.5.2008, 12:15
--------------------
namespace informatik
PM MAIL   Вверх
tatbesidovska
Дата 12.5.2008, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



informatik, большущее спасибо!!!! smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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