zoukankan      html  css  js  c++  java
  • datagridview 列 纵向合并 ,看了别人的源码拿过来自己搞搞

    效果

    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

  • 相关阅读:
    使用JdbcTemplate访问数据库
    解决为什么每次打开Eclipse新的workspace需要更新nexus-maven-repository-index问题
    java内存设置
    Eclipse如何解决启动慢
    eclipse的包的加减号展开方式
    maven总结5
    maven总结4
    maven总结3
    maven总结2
    maven总结1
  • 原文地址:https://www.cnblogs.com/dayou123123/p/2078489.html
Copyright © 2011-2022 走看看