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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> datagrid color row(Net cf), красим строку! 
:(
    Опции темы
fromrus
Дата 29.1.2009, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Драсте))!

Это код для самого  стиля колонки:

 
Код

using System;
using System.Windows.Forms;
using System.Drawing;
public class DataGridTextBoxColumnColored : DataGridTextBoxColumn
{
    //Определим класс аргумента события, делегат и само событие, 
    //необходимые для "общения" кода выполняющего прорисовку ячейки, с кодом, 
    //предоставляющим цвет для этой ячейки. 
    public class NeedBackgroundEventArgs : EventArgs
    {
        private int FRowNum;
        private Brush FBackBrush;
        private Brush FForeBrush;
        private CurrencyManager FSource;
        
        public int RowNum { get { return FRowNum; } }
        public Brush BackBrush { get { return FBackBrush; } set { FBackBrush = value; } }
        public Brush ForeBrush { get { return FForeBrush; } set { FForeBrush = value; } }
        public CurrencyManager Source { get { return FSource; } }
        
        public NeedBackgroundEventArgs(CurrencyManager source, int rowNum, Brush backBrush, Brush foreBrush)
        {
            this.FRowNum = rowNum;
            this.FBackBrush = BackBrush;
            this.FForeBrush = foreBrush;
            this.FSource = source;
        }
    }

    public delegate void NeedBackgroundEventHandler(object sender, NeedBackgroundEventArgs e);
    public event NeedBackgroundEventHandler NeedBackground;
    
    //А вот и переопределенный метод DataGridTextBoxColumn.Paint(), 
    //запрашивающий при помощи события (аргументов) цвет и передающий его 
    //базовому методу Paint(), в параметре backBrush. 
    //Теперь метод Paint базового класса будет заниматься прорисовкой ячейки, 
    //используя при этом подставленный нами backBrush. 
    protected override void Paint(Graphics g, Rectangle bounds, CurrencyManager source, int rowNum, Brush backBrush, Brush foreBrush, bool alignToRight)
    {
        NeedBackgroundEventArgs e = new NeedBackgroundEventArgs(source, rowNum, backBrush, foreBrush);
        if (NeedBackground != null) NeedBackground(this, e);
        base.Paint(g, bounds, source, rowNum, e.BackBrush, e.ForeBrush, alignToRight);
    }
}

А это код,который окрашивает строку в красный цвет если в первом столбце строки будет число <10:

Код

private void OnBackgroundEventHandler(object sender, DataGridTextBoxColumnColored.NeedBackgroundEventArgs e)
        {
            if (e.RowNum == dataGrid1.CurrentRowIndex)
            {
                e.BackBrush = new SolidBrush(dataGrid1.SelectionBackColor);
                e.ForeBrush = new SolidBrush(dataGrid1.SelectionForeColor);
            }
            else
            {
                //int divVal = e.RowNum / 2;
                //if (divVal * 2 != e.RowNum) e.BackBrush = new SolidBrush(Color.Red);
                //else e.BackBrush = new SolidBrush(dataGrid1.BackColor);
                //e.ForeBrush = new SolidBrush(dataGrid1.ForeColor);
                int val = (int)table.Rows[e.RowNum][0];
                if (val < 10) e.BackBrush = new SolidBrush(Color.Red);
                else e.BackBrush = new SolidBrush(dataGrid1.BackColor);
                e.ForeBrush = new SolidBrush(dataGrid1.ForeColor);
            }
        }

Вот беда-не работает!Оригинальный код красил все четные строки в красный цвет,я заменил условие... Все,что стоит после 49 строки не выполняется,т.е.прога последующие строки попросту игнорит и во время рантайма код "перепрыгивает" с этой строки на If()...И так каждый раз!

Что не так?

Спасибо 

PM MAIL ICQ   Вверх
Skalik
Дата 30.1.2009, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



а зачем Вам использовать SolidBrush??? 
Опиши задание подробнее...

Это сообщение отредактировал(а) Skalik - 30.1.2009, 03:54
PM MAIL ICQ   Вверх
fromrus
Дата 30.1.2009, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Skalik @ 30.1.2009,  01:34)
а зачем Вам использовать SolidBrush??? 
Опиши задание подробнее...

@который окрашивает строку в красный цвет если в первом столбце строки будет число <10:@-вот задание
Как зачем СолидБрашь?а красить-то чем??? smile 

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

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


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

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


 




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


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

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