• DataGridView分级显示


         DataGridView的分级显示,如果想找相关的第三方控件的时候,可以在codeproject中输入datagridview outlook,有个控件,看上去还是很不错的。下面的代码只是简单的实现了这个效果,感觉没必要重写控件。

          有图有真相,先看看效果图吧。

         

          好了,这个功能一看就知道了,下面给出完成的代码(数据源的绑定就省略了,思路明白就OK,呵呵)

    代码
            #region 绘制单元格
            
    private void dgvAlarmLog_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
            {
                
    if (e.RowIndex >= 0)
                {
                    Graphics g 
    = e.Graphics;
                    
    if (dgvAlarmLog.Rows[e.RowIndex].Cells[0].Value == plusImage || dgvAlarmLog.Rows[e.RowIndex].Cells[0].Value == subImage)
                    {
                        
    using (Brush gridBrush = new SolidBrush(this.dgvAlarmLog.GridColor), backColorBrush = new SolidBrush(Color.White), fontBrush = new SolidBrush(System.Drawing.Color.Black))
                        {
                            
    //去线
                            Rectangle rect = e.RowBounds;
                            g.FillRectangle(backColorBrush, rect.X 
    + 30, rect.Y, dgvAlarmLog.Width, rect.Height - 1);
                            
    //定义字体
                            Font font = new Font("宋体"10, FontStyle.Bold);
                            
    string str = dgvAlarmLog.Rows[e.RowIndex].Cells[3].Value.ToString();

                            
    //显示日期
                            g.DrawString(str, font, fontBrush, rect.X + 50, rect.Y + 4);
                        }
                    }
                }
            }
            
    #endregion

            
    #region 显示子数据
            
    private void dgvAlarmLog_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {
                
    //单击图片
                if (e.ColumnIndex == 0 && e.RowIndex>=0)
                {
                    
    object imageValue = dgvAlarmLog.Rows[e.RowIndex].Cells[0].Value;
                    
    if (imageValue == plusImage) //展开
                    {
                        
    string[] strs = (dgvAlarmLog.Rows[e.RowIndex].Cells[4].Value.ToString()).Split('');
                        
    string sdate = strs[0].Trim(); //开始时间
                        string edate = strs[1].Trim(); //结束时间

                        dgvAlarmLog.Rows[e.RowIndex].Cells[
    0].Value = subImage;

                        DataRow[] drs 
    = dt.Select("happen_date>='" + sdate + "' and happen_date <='" + edate + "'");
                        
    int count = 0;
                        
    foreach (DataRow dr in drs)
                        {
                            dgvAlarmLog.Rows.Insert(e.RowIndex 
    + 1 + (count++), new object[] { blankImage, dr["describe"].ToString(), dr["serial_no"].ToString(), dr["happen_date"].ToString(), dr["value"].ToString(), dr["pre_value"].ToString(), dr["avg_value"].ToString() });
                        }
                    }
                    
    else if(imageValue == subImage)//折叠
                    {
                        dgvAlarmLog.Rows[e.RowIndex].Cells[
    0].Value = plusImage;
                        
    try
                        {
                            
    object tempImage = dgvAlarmLog.Rows[e.RowIndex + 1].Cells[0].Value;
                            
    while (tempImage != plusImage && tempImage != subImage)
                            {
                                dgvAlarmLog.Rows.RemoveAt(e.RowIndex 
    + 1);
                                tempImage 
    = dgvAlarmLog.Rows[e.RowIndex + 1].Cells[0].Value;
                            }
                        }
                        
    catch { }
                    }
                }
            }
            
    #endregion

         再看一个二级目录的效果图:

               

    源代码下载地址:https://files.cnblogs.com/wangyong/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9.rar

  • 相关阅读:
    深入浅出Java三大框架SSH与MVC的设计模式
    excel 日期/数字格式不生效需要但双击才会生效的解决办法
    如何隐藏DIV对象
    使用 Arrays 类操作 Java 中的数组
    Java常量的应用
    Windows操作系统下tomcat安装版图文教程
    命名sql数据集
    【转载】如何写一个框架:步骤(下)
    【转载】如何写一个框架:步骤(上)
    C++Builder实现二分查找法
  • 原文地址:https://www.cnblogs.com/wangyong/p/1801365.html
Copyright © 2020-2023  润新知