关于VS2005 WinForm下DataGridView单元格合并,背景色设置

摘自:http://blog.csdn.net/Samen168/archive/2007/01/23/1491310.aspx

最近发现这方面在社区内提问的不少,发个源代码,嘿嘿

       private void Form1_Load(object sender, EventArgs e)
        
{
            DataTable dt 
= new DataTable();
            dt.Columns.Add(
"A");
            dt.Columns.Add(
"B");
            dt.Columns.Add(
"C");
            dt.Columns.Add(
"D");
            dt.Rows.Add(
new object[] "A1""B1""C1""D1" });
            dt.Rows.Add(
new object[] "A2""B2""C2""D2" });
            dt.Rows.Add(
new object[] "A3""B3""C3""D3" });
            
this.dataGridView1.DataSource = dt;

        }


        
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
        
{

            
if (e.RowIndex < 0 || e.RowIndex >= this.dataGridView1.Rows.Count - 1 || e.ColumnIndex == -1)
            
{
                
return;
            }


            
// 假定需要将C列值为C3的单元格与前一单元格合并
            if (e.ColumnIndex == 1 && this.dataGridView1[e.RowIndex, e.ColumnIndex + 1].Value.ToString() == "C3")
            
{
                e.Handled 
= true;
            }

            
if (e.ColumnIndex == 2 &&  e.Value.ToString() == "C3")
            
{
                DataGridViewCell preCell 
= this.dataGridView1[e.ColumnIndex -1, e.RowIndex];
                Rectangle re 
= new Rectangle(e.CellBounds.Left - this.dataGridView1.Columns[e.ColumnIndex - 1].Width
                    , e.CellBounds.Top, e.CellBounds.Width 
+ this.dataGridView1.Columns[e.ColumnIndex - 1].Width, e.CellBounds.Height);
                e.Graphics.FillRectangle(Brushes.White,  re);

                Pen pen 
= new Pen(this.dataGridView1.BackgroundColor,1);
                pen.DashStyle 
= System.Drawing.Drawing2D.DashStyle.Solid;
                e.Graphics.DrawLine(pen, re.X, re.Y 
+ re.Height-1, re.X + re.Width, re.Y + re.Height-1);
                e.Graphics.DrawLine(pen, re.X 
+ re.Width -1, re.Y , re.X + re.Width -1, re.Y + re.Height);

                SizeF strSize 
= e.Graphics.MeasureString(e.Value.ToString(), this.dataGridView1.Font);
                e.Graphics.DrawString(e.Value.ToString(), 
this.dataGridView1.Font
                    , Brushes.Black, re.X, re.Y 
+ (re.Height - strSize.Height) / 2);

                e.Handled 
= true;
            }

        }


        
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        
{
            
if(e.RowIndex != -1 && e.ColumnIndex == 1 && e.Value != null && e.Value.ToString() == "B1")
            
{
                e.CellStyle.BackColor 
= Color.Red;
                e.CellStyle.ForeColor 
= Color.Blue;
                e.CellStyle.SelectionBackColor 
= Color.BlueViolet;
            }

        }


    } 
posted @ 2007-04-25 17:48  Bireyou  阅读(1087)  评论(1编辑  收藏  举报