zoukankan      html  css  js  c++  java
  • ExDataGridView 群组扩展 ...

    DataGridView是非常强大的控件,当然有时他也不能满足我们现有的需求,当然我门就要对他进行扩展。 此控件我会逐步的扩展功能. 

    先上图咱们来看看效果,当然处理方式不是最佳的忘提供建议,此群组样式为DevGridView样式。

    解决方案,首先通过 public void BindingDataSource(DataTable dataTable, string group)  绑定数据员并设置群组合并列

    分析数据群组信息,并将数据群组信息记录,通过群组数据重绘,将数据绑定控件。

    放上重绘代码:

            protected override void OnRowPostPaint(DataGridViewRowPostPaintEventArgs e)
            {
                base.OnRowPostPaint(e);
                int rowIndex = 0;
                bool flag = false;
                string group = string.Empty;
                bool _curflag = false;
                foreach (GroupRows gr in this.GroupRowsColloce)
                {
                    group = gr.GroupName;
                    _curflag = gr.IsAllExpland;
                    if (e.RowIndex == gr.GroupIndex)
                    {
                        flag = true;
                        break;
                    }
                    if (e.RowIndex >= gr.GroupIndex)
                    {
                        rowIndex++;
                    }
                }
                if (!flag)
                {
                    Rectangle rectangle = new Rectangle(e.RowBounds.Location.X,
                                                        e.RowBounds.Location.Y,
                                                        RowHeadersWidth - 4,
                                                        e.RowBounds.Height);
                    TextRenderer.DrawText(e.Graphics,
                                          (e.RowIndex + 1 - rowIndex).ToString(),
                                          RowHeadersDefaultCellStyle.Font,
                                          rectangle,
                                          Color.Black,
                                          TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter);
                }
                else
                {
                    e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(206, 206, 206)), new Rectangle(e.RowBounds.X, e.RowBounds.Y, e.RowBounds.Width, this.Height + 2));
                    e.Graphics.DrawRectangle(new Pen(new SolidBrush(Color.FromArgb(220, 220, 220))), new Rectangle(e.RowBounds.X, e.RowBounds.Y, e.RowBounds.Width, this.Height + 2));
                    if (_curflag)
                    {
                        e.Graphics.DrawImage(Properties.Resources.sub,
                                           new Rectangle(e.RowBounds.X, e.RowBounds.Y + (e.RowBounds.Height - Properties.Resources.add.Width) / 2,
                                           Properties.Resources.add.Width,
                                           Properties.Resources.add.Height));
                    }
                    else
                    {
                        e.Graphics.DrawImage(Properties.Resources.add,
                                            new Rectangle(e.RowBounds.X, e.RowBounds.Y + (e.RowBounds.Height - Properties.Resources.add.Width) / 2,
                                            Properties.Resources.add.Width,
                                            Properties.Resources.add.Height));
                    }
                    StringFormat stringFormat = new StringFormat();
                    stringFormat.LineAlignment = StringAlignment.Center;
                    e.Graphics.DrawString(group,
                                        new Font("宋体", 9),
                                        new SolidBrush(Color.Black),
                                        new Rectangle(e.RowBounds.X + Properties.Resources.add.Width + 2,
                                                      e.RowBounds.Y + 2,
                                                      e.RowBounds.Width,
                                                     e.RowBounds.Height),
                                        stringFormat);
                }
            }
    

      控件的扩展都会提供给我门重构方法。我们只要通过重构|重绘都会得到我们想要的结果。

  • 相关阅读:
    为什么我的从任务管理器中看见我的硬盘使用率是100%(2)
    为什么我的从任务管理器中看见我的硬盘使用率是100%(1)
    win8正式版
    pwnable_orw
    cmcc_simplerop
    分析kernel.dll函数CreateRemoteThread进0环
    [V&N2020 公开赛]easyTHeap
    恶意代码分析训练第一天
    SWPUCTF_2019_p1KkHeap
    3环函数进入0环函数
  • 原文地址:https://www.cnblogs.com/liuyunsheng/p/2583598.html
Copyright © 2011-2022 走看看