zoukankan      html  css  js  c++  java
  • DevExpress GridView 单元格进度条

    DevExpress提供进度条的控件ProgressBarControl,并且能在GridView的单元格中使用,效果图如图所示

    关于单元格绑定progressBarControl,这里我简单介绍一下,列的ColumnEdit属性选择ProgressBarControl,然后设置选择的repositoryitemprogressBar1的ShowTitle属性来显示中间的百分数文本即可(其中,这里的数据源要求为整数型,如果你的字段值为小数类型的话,比如0.5,绑定字段的时候乘以100,改成50,这里的%是控件本身会显示的,不需要设置displayformat)。

    ProgressBarControl使用起来简单快捷,但是如果想控制当小于某个值的时候用颜色预警,ProgressbarControl暂时还没有提供这个功能,所以只能自己利用GridView的CustomDrawCell的单元格绘制事件来实现此需求。

    代码直接copy调用即可使用:

     1 /// <summary>
     2         /// 自定义进度条列
     3         /// </summary>
     4         /// <param name="view"></param>
     5         /// <param name="fieldName">列的字段名</param>
     6         /// <param name="warningValue"></param>
     7         /// <param name="lessColor"></param>
     8         /// <param name="greaterColor"></param>
     9         public static void CustomProgressBarColumn(DevExpress.XtraGrid.Views.Grid.GridView view, string fieldName, int warningValue=50, Brush lessColor = null, Brush greaterColor = null)
    10         {
    11             var col = view.Columns[fieldName];
    12             if (col == null) return;
    13             col.AppearanceCell.Options.UseTextOptions = true;
    14             col.AppearanceCell.TextOptions.HAlignment = HorzAlignment.Center;
    15             view.CustomDrawCell += (s, e) =>
    16             {
    17                 if (e.Column.FieldName == fieldName)
    18                 {
    19                     DrawProgressBar(e,warningValue,lessColor,greaterColor);
    20                     e.Handled = true;
    21                     DrawEditor(e);
    22                 }
    23             };
    24         }
    25        static void DrawProgressBar(DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e, int warningValue = 50, Brush lessColor = null, Brush greaterColor = null)
    26         {
    27             decimal percent = e.CellValue == null ? 0m : (decimal)e.CellValue;
    28             int width = (int)(percent * e.Bounds.Width);
    29             Rectangle rect = new Rectangle(e.Bounds.X, e.Bounds.Y, width, e.Bounds.Height);
    30  
    31             Brush b = Brushes.Green;
    32             if (greaterColor != null)
    33             {
    34                 b = greaterColor;
    35             }
    36             if (percent * 100 < warningValue)
    37             {
    38                 if (lessColor == null)
    39                 {
    40                     b = Brushes.Red;
    41                 }
    42                 else
    43                 {
    44                     b = lessColor;
    45                 }
    46             }
    47             e.Graphics.FillRectangle(b, rect);
    48         }
    49        static void DrawEditor(DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e)
    50         {
    51             GridCellInfo cell = e.Cell as GridCellInfo;
    52             Point offset = cell.CellValueRect.Location;
    53             BaseEditPainter pb = cell.ViewInfo.Painter as BaseEditPainter;
    54             AppearanceObject style = cell.ViewInfo.PaintAppearance;
    55             if (!offset.IsEmpty)
    56                 cell.ViewInfo.Offset(offset.X, offset.Y);
    57             try
    58             {
    59                 pb.Draw(new ControlGraphicsInfoArgs(cell.ViewInfo, e.Cache, cell.Bounds));
    60             }
    61             finally
    62             {
    63                 if (!offset.IsEmpty)
    64                 {
    65                     cell.ViewInfo.Offset(-offset.X, -offset.Y);
    66                 }
    67             }
    68         }

    调用代码示例如下(绑定的数据源字段值为小于1的小数值,如:0.33,设置列的DisplayFormat属性):

    1 gridView1.Columns["col11"].DisplayFormat.FormatType = FormatType.Numeric;
    2 gridView1.Columns["col11"].DisplayFormat.FormatString = "p0";
    3 CustomProgressBarColumn(gridView1, "col11", 50, Brushes.IndianRed, Brushes.DodgerBlue);

    LookAndFeel.Style Skin/Office2003 为固定颜色,选择为其他时为 StartColor/EndColor 来定义
    另外还需要把LookAndFeel.UserDefaultLookAndFeel 设置为 false
  • 相关阅读:
    第十三周课程总结
    第十二周总结
    第十一周课程总结
    python 调用c++ dll 动态库
    c++代码覆盖率工具使用
    基于互联网的高校学生工作管理系统--文献随笔(十八)
    中职学生工作管理系统的研究与实现--文献随笔(十七)
    学生工作管理系统的设计与实现--文献随笔(十六)
    山东青年政治学院学生工作管理信息系统的设计与实现--文献随笔(十五)
    四川职业技术学院辅导员工作管理信息系统的设计与开发--文献随笔(十四)
  • 原文地址:https://www.cnblogs.com/RCJL/p/12421662.html
Copyright © 2011-2022 走看看