• 『转载』C# winform 中dataGridView的重绘(进度条,虚线,单元格合并等)


    原文转载自:http://hi.baidu.com/suming/item/81e45b1ab9b4585f2a3e2243

    最近比较浅的研究了一下dataGridView的重绘,发现里面还是有很多东西可以学习的,摘录如下(其实就是在dataGridView1_CellPainting写一些代码)

    主要代码:

      1    int top = 0;
      2    int left = 0;
      3    int height = 0;
      4    int width1 = 0;
      5    /// <summary>
      6    /// 窗体的重绘事件
      7    /// </summary>
      8    /// <param name="sender"></param>
      9    /// <param name="e"></param>
     10    private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
     11    {
     12        /** 表头处理*************************************/
     13        if (e.RowIndex == -1)
     14        {
     15            if (e.ColumnIndex == 0 || e.ColumnIndex == 1 || e.ColumnIndex == 2 || e.ColumnIndex == 3 || e.ColumnIndex == 4 || e.ColumnIndex == 5)
     16            {
     17                top = e.CellBounds.Top;
     18                left = e.CellBounds.Left - 1;
     19                height = e.CellBounds.Height;
     20                width1 = e.CellBounds.Width;
     21                Rectangle rect1 = new Rectangle(left, top, width1, e.CellBounds.Height);
     22                //表头第一列
     23                if (e.ColumnIndex == 0)
     24                {
     25                    using (Brush backColorBrush = new SolidBrush(Color.Blue))
     26                    {
     27                        //抹去原来的cell背景
     28                        e.Graphics.FillRectangle(backColorBrush, rect1);
     29                    }
     30                }
     31                //表头第二列
     32                else if (e.ColumnIndex == 1)
     33                {
     34                    using (Brush backColorBrush = new SolidBrush(Color.Orange))
     35                    {
     36                        //抹去原来的cell背景
     37                        e.Graphics.FillRectangle(backColorBrush, rect1);
     38                    }
     39                }
     40                //表头第三列
     41                else if (e.ColumnIndex == 2)
     42                {
     43                    using (Brush backColorBrush = new SolidBrush(Color.Orange))
     44                    {
     45                        //抹去原来的cell背景
     46                        e.Graphics.FillRectangle(backColorBrush, rect1);
     47                    }
     48                }
     49                //表头第四列
     50                else if (e.ColumnIndex == 3)
     51                {
     52                    using (Brush backColorBrush = new SolidBrush(Color.Orange))
     53                    {
     54                        //抹去原来的cell背景
     55                        e.Graphics.FillRectangle(backColorBrush, rect1);
     56                    }
     57                }
     58                //表头第五列
     59                else if (e.ColumnIndex == 4)
     60                {
     61                    using (Brush backColorBrush = new SolidBrush(Color.Blue))
     62                    {
     63                        //抹去原来的cell背景
     64                        e.Graphics.FillRectangle(backColorBrush, rect1);
     65                    }
     66                }
     67                //表头第六列
     68                else if (e.ColumnIndex == 5)
     69                {
     70                    using (Brush backColorBrush = new SolidBrush(Color.Blue))
     71                    {
     72                        //抹去原来的cell背景
     73                        e.Graphics.FillRectangle(backColorBrush, rect1);
     74                    }
     75                }
     76                using (Pen gridLinePen = new Pen(Color.Green , 1))
     77                {
     78                    //绘出上线
     79                    e.Graphics.DrawLine(gridLinePen, left, top, left + width1, top);
     80                    //绘出下线
     81                    e.Graphics.DrawLine(gridLinePen, left, top + height, left + width1, top + height);
     82                    //绘出左线
     83                    e.Graphics.DrawLine(gridLinePen, left, top, left, top + height);
     84                    string columnValue = "";
     85                    //计算绘制字符串的位置
     86                    if (e.ColumnIndex == 0)
     87                    {
     88                        columnValue = "零件号";
     89                    }
     90                    else if (e.ColumnIndex == 1)
     91                    {
     92                        columnValue = "8:00--11:59";
     93                    }
     94                    else if (e.ColumnIndex == 2)
     95                    {
     96                        columnValue = "12:00--16:59";
     97                    }
     98                    else if (e.ColumnIndex == 3)
     99                    {
    100                        columnValue = "18:00--30:59";
    101                    }
    102                    else if (e.ColumnIndex == 4)
    103                    {
    104                        columnValue = "进度";
    105                    }
    106                    else if (e.ColumnIndex == 5)
    107                    {
    108                        columnValue = "进度率";
    109                    }
    110                    SizeF sf = e.Graphics.MeasureString(columnValue, e.CellStyle.Font);
    111                    float lstr = (width1 - sf.Width) / 2;
    112                    //float rstr = sf.Height/2;
    113                    float rstr = (height - sf.Height) / 2;
    114                    //画出文本框
    115   
    116                    if (columnValue != "")
    117                    {
    118                        e.Graphics.DrawString(columnValue, e.CellStyle.Font,
    119                                                   new SolidBrush(Color.White),
    120                                                     left + lstr,
    121                                                     top + rstr,
    122                                                     StringFormat.GenericDefault);
    123                    }
    124                }
    125                e.Handled = true;
    126            }
    127   
    128        }
    129         /** 内容处理*************************************/
    130        else
    131        {
    132            if (e.ColumnIndex == 0 || e.ColumnIndex == 1 || e.ColumnIndex == 2 || e.ColumnIndex == 3 || e.ColumnIndex == 4 || e.ColumnIndex == 5)
    133            {
    134                top = e.CellBounds.Top;
    135                left = e.CellBounds.Left - 1;
    136                height = e.CellBounds.Height;
    137                width1 = e.CellBounds.Width;
    138                Rectangle rect1 = new Rectangle(left, top, width1, e.CellBounds.Height);
    139                //内容第一列
    140                if (e.ColumnIndex == 0)
    141                {
    142                    using (Brush backColorBrush = new SolidBrush(Color.LightGreen))
    143                    {
    144                        //抹去原来的cell背景
    145                        e.Graphics.FillRectangle(backColorBrush, rect1);
    146                    }
    147                }
    148                //内容第二列
    149                else if (e.ColumnIndex == 1)
    150                {
    151                    using (Brush backColorBrush = new SolidBrush(Color.White))
    152                    {
    153                        //抹去原来的cell背景
    154                        e.Graphics.FillRectangle(backColorBrush, rect1);
    155                    }
    156                }
    157                //内容第三列
    158                else if (e.ColumnIndex == 2)
    159                {
    160                    using (Brush backColorBrush = new SolidBrush(Color.White))
    161                    {
    162                        //抹去原来的cell背景
    163                        e.Graphics.FillRectangle(backColorBrush, rect1);
    164                    }
    165                }
    166                //内容第四列
    167                else if (e.ColumnIndex == 3)
    168                {
    169                    using (Brush backColorBrush = new SolidBrush(Color.White))
    170                    {
    171                        //抹去原来的cell背景
    172                        e.Graphics.FillRectangle(backColorBrush, rect1);
    173                    }
    174                }
    175                //内容第五列
    176                else if (e.ColumnIndex == 4)
    177                {
    178                    using (Brush backColorBrush = new SolidBrush(Color.LightGreen))
    179                    {
    180                        //抹去原来的cell背景
    181                        e.Graphics.FillRectangle(backColorBrush, rect1);
    182                    }
    183                }
    184                //内容第六列
    185                else if (e.ColumnIndex == 5)
    186                {
    187                    using (Brush backColorBrush = new SolidBrush(Color.LightGreen))
    188                    {
    189                        //抹去原来的cell背景
    190                        e.Graphics.FillRectangle(backColorBrush, rect1);
    191                    }
    192                }
    193                using (Pen gridLinePen = new Pen(Color.Green, 1))
    194                {
    195                    //绘出左线
    196                    e.Graphics.DrawLine(gridLinePen, left, top, left, top + height);
    197                     
    198                }
    199                //绘出进度率的线
    200                if (e.ColumnIndex == 1 || e.ColumnIndex == 2 || e.ColumnIndex == 3)
    201                {
    202                    string str = e.Value.ToString();
    203                    int index =str.LastIndexOf ("/");
    204                    int widths = Convert.ToInt32(Convert.ToDouble(str.Substring(0, index)) / Convert.ToDouble(str.Substring(index + 1)) * width1);
    205                    if (widths > width1)
    206                    {
    207                        widths = width1;
    208                    }
    209                    using (Pen gridLinePen = new Pen(Color.Blue, Convert.ToInt32(height / 3)))
    210                    {
    211   
    212                        e.Graphics.DrawLine(gridLinePen, left, top + height / 2 + Convert.ToInt32(height / 3), left + widths, top + height / 2 + Convert.ToInt32(height /3));
    213   
    214                    }
    215                }  
    216                //画出上下线,中线和单元格的数据
    217                using (Pen gridLinePen = new Pen(Color.Green , 1))
    218                {
    219                    float[] BlueValues = { 1, 1,1, 1 };
    220                    gridLinePen.DashPattern = BlueValues;
    221                    //绘出上线
    222                    e.Graphics.DrawLine(gridLinePen, left, top, left + width1, top);
    223                    //绘出下线
    224                    e.Graphics.DrawLine(gridLinePen, left, top + height, left + width1, top + height);
    225                    if (e.ColumnIndex == 1 || e.ColumnIndex == 2 || e.ColumnIndex == 3)
    226                    {                          
    227   
    228                        //绘出中线
    229                        e.Graphics.DrawLine(gridLinePen, left, top + height / 2, left + width1, top + height / 2);
    230                        e.Graphics.DrawLine(gridLinePen, left + width1/4, top + height / 2, left + width1/4, top + height);
    231                        e.Graphics.DrawLine(gridLinePen, left + width1 / 2, top + height / 2, left + width1 / 2, top + height);
    232                        e.Graphics.DrawLine(gridLinePen, left + width1*3 / 4, top + height / 2, left + width1*3 / 4, top + height);
    233                    }                       
    234                       
    235                    string columnValue =e.Value.ToString () ;
    236                    SizeF sf = e.Graphics.MeasureString(columnValue, e.CellStyle.Font);
    237                    float lstr = (width1 - sf.Width) / 2;
    238                    //float rstr = sf.Height/2;
    239                    float rstr = (height/2 - sf.Height) / 2;
    240                    //画出文本框数据
    241                    if (columnValue != "")
    242                    {
    243                        e.Graphics.DrawString(columnValue, e.CellStyle.Font,
    244                                                   new SolidBrush(Color.Black),
    245                                                     left + lstr,
    246                                                     top + rstr,
    247                                                     StringFormat.GenericDefault);
    248                    }
    249                }
    250                e.Handled = true;
    251            }
    252        }
    253    }

    例图如下:

  • 相关阅读:
    SVN 客户端的使用
    day36_Spring学习笔记_04_SVN
    VisualSVN Server 的使用图解(windows版本)
    day68_淘淘商城项目_01_电商介绍 + 互联网术语 + SOA + 分布式 + 集群介绍 + 环境配置 + 框架搭建_匠心笔记
    VisualSVN Server 的安装(windows版本)
    【代码规范神器】阿里巴巴Java开发规约IDE插件使用教程(P3C)
    学了这四招,你在Linux上观看Netflix视频不发愁
    如何在Fedora或CentOS上使用Samba共享
    Fedora 23如何安装LAMP服务器
    HTTP/HTTPS自动加密上网方案
  • 原文地址:https://www.cnblogs.com/shuxiaolong/p/20140527_001.html
Copyright © 2020-2023  润新知