datagridview列 纵向合并 ,看了别人的源码拿过来自己搞搞

mac2022-07-05  18

效果

 

View Code using  System; using  System.Collections.Generic; using  System.ComponentModel; using  System.Data; using  System.Drawing; using  System.Linq; using  System.Text; using  System.Windows.Forms; namespace  WindowsFormsApplication1{     public   partial   class  Form1 : Form    {         public  Form1()        {            InitializeComponent();        }         public   override   string  ToString()        {             return  Convert.ToString( base .ToString());        }         #region  "合并单元格的测试"          // private int? nextrow = null;         // private int? nextcol = null;         //   设置单元格内容显示格式          private   void  dataGridView1_CellFormatting( object  sender, System.Windows.Forms.DataGridViewCellFormattingEventArgs e)        {             // #region description             // if (this.dataGridView1.Columns["description"].Index == e.ColumnIndex && e.RowIndex >= 0)             // {             //     if (this.nextcol != null & e.ColumnIndex == this.nextcol)             //     {             //         e.CellStyle.BackColor = Color.LightBlue;             //         this.nextcol = null;             //     }             //     if (this.nextrow != null & e.RowIndex == nextrow)             //     {             //         e.CellStyle.BackColor = Color.LightPink;             //         this.nextrow = null;             //     }             //     if (e.RowIndex != this.dataGridView1.RowCount - 1)             //     {             //         if (e.Value.ToString() == Convert.ToString(this.dataGridView1.Rows[e.RowIndex + 1].Cells[e.ColumnIndex + 1].Value))             //         {             //             e.CellStyle.BackColor = Color.LightPink;             //             nextrow = e.RowIndex + 1;             //         }             //     }             // }             // #endregion             // if (this.dataGridView1.Columns["name"].Index == e.ColumnIndex && e.RowIndex >= 0)             // {             //      //  upd by liu             //     if (e.Value.ToString() == this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString())             //     {             //         e.CellStyle.BackColor = Color.LightBlue;             //         nextcol = e.ColumnIndex + 1;             //     }             // }         }         // ==========================         //  记录合并的行数          static   int  rowcount  =   0 ;         // 绘制单元格          private   void  dataGridView1_CellPainting( object  sender, System.Windows.Forms.DataGridViewCellPaintingEventArgs e)        {             // 纵向合并              if  ( this .dataGridView1.Columns[ " description " ].Index  ==  e.ColumnIndex  &&  e.RowIndex  >=   0 )            {                 // 初始两个笔刷,表格线设置为颜色为红色 就是我们要画的表格线                  using  (                    Brush gridBrush  =   new  SolidBrush(Color.Red), // this.dataGridView1.GridColor                      backColorBrush  =   new  SolidBrush(e.CellStyle.BackColor)                    )                {                     using  (Pen gridLinePen  =   new  Pen(gridBrush))                    {                         //  擦除原单元格背景                         e.Graphics.FillRectangle(backColorBrush, e.CellBounds);                         /**/                          /// /绘制线条,这些线条是单元格相互间隔的区分线条,                         /// /因为我们只对列description做处理,所以datagridview自己会处理左侧和上边缘的线条                         /// /相邻单元格的值一样的话,就不在画下边缘的线,实现合并效果                          if  (e.RowIndex  !=   this .dataGridView1.RowCount  -   1 )                        {                             if  (e.Value.ToString()  !=  Convert.ToString( this .dataGridView1.Rows[e.RowIndex  +   1 ].Cells[e.ColumnIndex].Value))                            {                                e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom  -   1 ,                                e.CellBounds.Right  -   1 , e.CellBounds.Bottom  -   1 ); // 下边缘的线                                 // 绘制值                                  if  (e.Value  !=   null )                                {                                     int  heighty  =  e.CellBounds.Height  /   2   *  rowcount;                                    e.Graphics.DrawString((String)e.Value, e.CellStyle.Font,                                        Brushes.Crimson, e.CellBounds.X  +   2 ,                                        e.CellBounds.Y  +   2   -  heighty, StringFormat.GenericDefault);                                    rowcount  =   0 ;                                }                            }                             else                             {                                rowcount ++ ;                            }                        }                         else                         {                            e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom  -   1 ,                                e.CellBounds.Right  -   1 , e.CellBounds.Bottom  -   1 ); // 下边缘的线                             // 绘制值                              if  (e.Value  !=   null )                            {                                e.Graphics.DrawString((String)e.Value, e.CellStyle.Font,                                    Brushes.Crimson, e.CellBounds.X  +   2 ,                                    e.CellBounds.Y  +   2 , StringFormat.GenericDefault);                            }                        }                         // 右侧的线                         e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right  -   1 ,                            e.CellBounds.Top, e.CellBounds.Right  -   1 ,                            e.CellBounds.Bottom  -   1 );                        e.Handled  =   true ;                    }                }            }             #region // 横向合并              // if (this.dataGridView1.Columns["name"].Index == e.ColumnIndex && e.RowIndex >= 0)             // {             //     using (             //         Brush gridBrush = new SolidBrush(this.dataGridView1.GridColor),             //         backColorBrush = new SolidBrush(e.CellStyle.BackColor))             //     {             //         using (Pen gridLinePen = new Pen(gridBrush))             //         {             //              //  擦除原单元格背景             //             e.Graphics.FillRectangle(backColorBrush, e.CellBounds);             //             if (e.Value.ToString() != this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex + 1].Value.ToString())             //             {             //                  // 右侧的线             //                 e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1, e.CellBounds.Top,             //                     e.CellBounds.Right - 1, e.CellBounds.Bottom - 1);             //                  // 绘制值             //                 if (e.Value != null)             //                 {             //                     e.Graphics.DrawString((String)e.Value, e.CellStyle.Font,             //                         Brushes.Crimson, e.CellBounds.X + 2,             //                         e.CellBounds.Y + 2, StringFormat.GenericDefault);             //                 }             //             }             //              // 下边缘的线             //             e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom - 1,             //                                         e.CellBounds.Right - 1, e.CellBounds.Bottom - 1);             //             e.Handled = true;             //         }             //     }             // }              #endregion         }         #endregion          private   void  Form1_Load( object  sender, EventArgs e)        {            DataTable dt  =   new  DataTable();            dt.Columns.Add( " description " );            dt.Columns.Add( " name " );            dt.Columns.Add( " sex " );            dt.Rows.Add( " A " " cc " " 1 " );            dt.Rows.Add( " A " " dd " " 1 " );            dt.Rows.Add( " B " " dd " " 0 " );            dt.Rows.Add( " A " " dd " " 0 " );            dt.Rows.Add( " C " " dd " " 0 " );            dt.Rows.Add( " A " " dd " " 0 " );            dt.Rows.Add( " C " " dd " " 0 " );             //  不允许调整行高 用于合并行居中              this .dataGridView1.AllowUserToResizeRows  =   false ;             this .dataGridView1.DataSource  =  dt;             this .dataGridView1.Sort( this .dataGridView1.Columns[ " description " ],ListSortDirection.Ascending);                         //   按和并列,排序             //   dataGridView1.Columns["Column1"].HeaderCell.SortGlyphDirection = SortOrder.Ascending             //   this.dataGridView1.Sort(this.dataGridView1.Columns["description"], ListSortDirection.Ascending);              bool  issort  =   false ;            //暂时只想到这个办法             this .dataGridView1.Sorted  +=   new  EventHandler((xx, yy)  =>             {                 // this.dataGridView1.SortedColumn.SortMode = DataGridViewColumnSortMode.Automatic;                 // this.dataGridView1.Columns[1].SortMode = DataGridViewColumnSortMode.NotSortable;                                  string  col  =   this .dataGridView1.SortedColumn.Name;                 if  (col  ==   " description " || col == "" )                {                    col  =   "" ;                }                 else                  {                    col  =   " , "   +  col;                }                 //  重新指定排序规则                 //  在第一列默认排列顺序下,排列其他列                 DataView dv  =  dt.DefaultView;                 if  (issort)                {                    dv.Sort  =   " description   " + col + "  ASC " ;                    issort  =   ! issort;                }                 else                 {                    dv.Sort  =   " description   "   +  col  +   "  DESC " ;                    issort  =   ! issort;                }                 this .dataGridView1.DataSource  =  dv;               //   this.dataGridView1.Columns[0].SortMode = DataGridViewColumnSortMode.Automatic;                            });        }       }}

 

1. Convert.ToString(this.dataGridView1.Rows[e.RowIndex + 1].Cells[e.ColumnIndex].Value))

  原文直接.tostring().   当datagridview 启动添加行时,比较最后一行时会有错误.

2.不足:当选中单元格,或调整行高或其他操作,合并列的值会显示.

2. 只为简单记录随笔,别无它意.

代码:/Files/dayou123123/合并DataGridView.rar

原文:http://blog.csdn.net/csharp_start/archive/2007/09/30/1808000.aspx

更多:http://www.cnblogs.com/peterzb/archive/2009/05/29/1491891.html

转载于:https://www.cnblogs.com/dayou123123/archive/2011/06/11/2078489.html

相关资源:DataGridView合并单元格(纵向合并及横向合并)
最新回复(0)