Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > datagrid color row(Net cf)


Автор: fromrus 29.1.2009, 22:08
Драсте))!

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

 
Код

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()...И так каждый раз!

Что не так?

Спасибо 

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

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

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)