Драсте))!
Это код для самого стиля колонки:
| Код | 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()...И так каждый раз!
Что не так?
Спасибо
|