日期:2014-05-20  浏览次数:20722 次

再散一帖:关于双行表头的的DataGridView的实现
这个实现,视觉效果方面基本上没有问题了,不过执行速度还有很大提升的空间(比如,我不加区分的每次画主标题就浪费了很多时间)。但引入Timer控件的使用,刷新时闪烁的问题已经完美解决,本着“够用就行”的原则我不打算改进了...

代码:应该可以这样直接帖的,试试

        ///   <summary>
        ///   支持双行表头的的DataGridView
        ///  
        ///   用法示例:
        ///   dg.AddSpanHeader(4,   4,   "主标题 ");
        ///   则将第4列开始的4列设为双行表头,主标题为“主标题”,子标题为原来的   Value   值
        ///  
        ///   phommy@hotmail.com
        ///   </summary>
        public   partial   class   DataGridViewEx1   :   DataGridView
        {
                public   DataGridViewEx1()
                {
                        InitializeComponent();
                }
                protected   override   void   OnPaint(PaintEventArgs   pe)
                {
                        //   TODO:   在此处添加自定义绘制代码

                        //   调用基类   OnPaint
                        base.OnPaint(pe);
                }
                private   struct   SpanInfo     //表头信息
                {
                        public   SpanInfo(string   Text,   int   Position,   int   Left,   int   Right)
                        {
                                this.Text   =   Text;
                                this.Position   =   Position;
                                this.Left   =   Left;
                                this.Right   =   Right;
                        }

                        public   string   Text;           //列主标题
                        public   int   Position;         //位置,1:左,2中,3右
                        public   int   Left;                 //对应左行
                        public   int   Right;               //对应右行