天天看點

DataGridView合并單元格 編輯單元格

同僚的一個項目需要将DataGridView單元格中的内容分不同顔色顯示,想了想隻有重繪了。

這種方法還可以用做合并單元格。

參考代碼:

private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)

        {

            if (e.RowIndex == 0 && e.ColumnIndex >= 0)

            {

                int left = e.CellBounds.Left;

                int top = e.CellBounds.Top;

                int right = e.CellBounds.Right;

                int bottom = e.CellBounds.Bottom;

                e.Graphics.FillRectangle(new SolidBrush(Color.White), e.CellBounds);

                e.Handled = true;

                Brush gridBrush = new SolidBrush(this.dataGridView1.GridColor);

                Pen gridLinePen = new Pen(gridBrush);

                e.Graphics.DrawLine(gridLinePen, right - 1,

                           top, right - 1,

                           bottom - 1);

                e.Graphics.DrawLine(gridLinePen, left,

                           bottom - 1, right,

                           bottom - 1);

                Brush b1 = new SolidBrush(Color.Black);

                e.Graphics.DrawString((String)e.Value, e.CellStyle.Font,

                                        b1, left + 2,

                                        top + 1, StringFormat.GenericDefault);

                Brush b2 = new SolidBrush(Color.Red);

                e.Graphics.DrawString((String)e.Value, e.CellStyle.Font,

                                        b2, left + 2,

                                        top + 10, StringFormat.GenericDefault);

            }

            DataGridViewSelectedCellCollection dgvscc = this.dataGridView1.SelectedCells;

            foreach (DataGridViewCell dgvc in dgvscc)

            {

                    if (e.RowIndex == 0

                        && e.RowIndex == dgvc.RowIndex

                        && e.ColumnIndex == dgvc.ColumnIndex)

                    {

                        int left = e.CellBounds.Left;

                        int top = e.CellBounds.Top;

                        int right = e.CellBounds.Right;

                        int bottom = e.CellBounds.Bottom;

                        // 繪制背景,覆寫單元格區域

                        e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(10,36,106)), e.CellBounds);

                        // 繪制邊框

                        Brush gridBrush = new SolidBrush(this.dataGridView1.GridColor);

                        Pen gridLinePen = new Pen(gridBrush);

                        e.Graphics.DrawLine(gridLinePen, right - 1,

                                   top, right - 1,

                                   bottom - 1);

                        e.Graphics.DrawLine(gridLinePen, left,

                                   bottom - 1, right,

                                   bottom - 1);

                        // 繪制文字

                        Brush b1 = new SolidBrush(Color.White);

                        e.Graphics.DrawString((String)e.Value, e.CellStyle.Font,

                                                b1, left + 2,

                                                top + 1, StringFormat.GenericDefault);

                        Brush b2 = new SolidBrush(Color.White);

                        e.Graphics.DrawString((String)e.Value, e.CellStyle.Font,

                                                b2, left + 2,

                                                top + 10, StringFormat.GenericDefault);

                    }

            }

            e.Handled = true;            

        }