Winform DataGridView添加进度条

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/beibeisong/article/details/50416946

前段时间需要完成列表(datagridview)添加进度条,实现进度的实时显示,在网上查阅资料,得到下面的资料并成功应用

 public class DataGridViewProgressBarCell : DataGridViewCell
    {
        public DataGridViewProgressBarCell()
        {
            this.ValueType = typeof(int);
        }
 
        //设置进度条的背景色;
        public DataGridViewProgressBarCell(Color progressBarColor)
            : base()
        {
            ProgressBarColor = progressBarColor;
        }
 
        protected Color ProgressBarColor = Color.Green; //进度条的默认背景颜色,绿色;
 
        protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts)
        {
            using (SolidBrush backBrush = new SolidBrush(cellStyle.BackColor))
            {
                graphics.FillRectangle(backBrush, cellBounds);
            }
            base.PaintBorder(graphics, clipBounds, cellBounds, cellStyle, advancedBorderStyle);
 
            using (SolidBrush brush = new SolidBrush(ProgressBarColor))
            {
                if (value == null)
                    value = 0;
                int num = (int)value;
                float percent = num / 100F;
 
                graphics.FillRectangle(brush, cellBounds.X, cellBounds.Y + 1, cellBounds.Width * percent, cellBounds.Height - 3);
 
                string text = string.Format("{0}%", num);
                SizeF rf = graphics.MeasureString(text, cellStyle.Font);
                float x = cellBounds.X + (cellBounds.Width - rf.Width) / 2f;
                float y = cellBounds.Y + (cellBounds.Height - rf.Height) / 2f;
                graphics.DrawString(text, cellStyle.Font, new SolidBrush(cellStyle.ForeColor), x, y);
            }
        }
    }
 
    public class DataGridViewProgressBarColumn : DataGridViewColumn
    {
        public DataGridViewProgressBarColumn()
            : base(new DataGridViewProgressBarCell())
        {
            CellTemplate = new DataGridViewProgressBarCell();
        }
    }

猜你喜欢

转载自blog.csdn.net/beibeisong/article/details/50416946