• C#在DataGridView显示一个进度条列


    using System;
    using System.Drawing;
    using System.Windows.Forms;
    using System.ComponentModel;
    
    namespace EFwinformTools.appclass
    {
        class DataGridViewProgressColumn : DataGridViewImageColumn
        {
            public DataGridViewProgressColumn()
            {
                this.CellTemplate = new DataGridViewProgressCell();
            }
        }
        class DataGridViewProgressCell : DataGridViewImageCell
        {
            static Image emptyImage;
            static DataGridViewProgressCell()
            {
                emptyImage = new Bitmap(1, 1, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            }
            public DataGridViewProgressCell()
            {
                this.ValueType = typeof(int);
            }
            public string ShowText { get; set; } //如果要显示独立的文字而不是百分比,设置此属性。
            protected override object GetFormattedValue(object value,
                                int rowIndex, ref DataGridViewCellStyle cellStyle,
                                TypeConverter valueTypeConverter,
                                TypeConverter formattedValueTypeConverter,
                                DataGridViewDataErrorContexts context)
            {
                return emptyImage;
            }
    
            protected override void Paint(System.Drawing.Graphics g, System.Drawing.Rectangle clipBounds, System.Drawing.Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts)
            {
                string tValue = value.ToString();
                if (tValue == "") tValue = "0";
    
                int progressVal; 
                try { progressVal = Convert.ToInt16(tValue); }
                catch
                {
                    progressVal = 0;
                }
                float percentage = ((float)progressVal / 100.0f);
                Brush backColorBrush = new SolidBrush(cellStyle.BackColor);
                Brush foreColorBrush = new SolidBrush(cellStyle.ForeColor);
                base.Paint(g, clipBounds, cellBounds,
                 rowIndex, cellState, value, formattedValue, errorText,
                 cellStyle, advancedBorderStyle, (paintParts & ~DataGridViewPaintParts.ContentForeground));
                
                string DrawStringStr = progressVal.ToString() + "%";
                if (ShowText != "")
                {
                    DrawStringStr = ShowText;
                }
                if (percentage > 0.0)
                {
                    g.FillRectangle(new SolidBrush(Color.FromArgb(163, 189, 242)), cellBounds.X + 2, cellBounds.Y + 2, Convert.ToInt32((percentage * cellBounds.Width - 4)), cellBounds.Height - 4);
                    g.DrawString(DrawStringStr, cellStyle.Font, foreColorBrush, cellBounds.X + 30, cellBounds.Y + 5);
                }
                else
                {
                    if (this.DataGridView.CurrentRow.Index == rowIndex)
                        g.DrawString(DrawStringStr, cellStyle.Font, new SolidBrush(cellStyle.SelectionForeColor), cellBounds.X + 30, cellBounds.Y + 5);
                    else
                        g.DrawString(DrawStringStr, cellStyle.Font, foreColorBrush, cellBounds.X + 30, cellBounds.Y + 5);
                }
            }
        }
    }
    

    ShowText属性,是为了把显示文字可以独立设置。默认是显示百分比。

    使用时,直接绑定含有百分比的整型数字即可,绑定时无法独立设置显示的值,下面的方法是独立设置值时的方法

    DataGridViewProgressCell ProgressCell= new DataGridViewProgressCell();
    
                        string fValue = PatentList.Rows[i]["Correlation"].ToString();
                        if (fValue == "") fValue = "0";
                        try
                        {
                            ProgressCell.Value = Convert.ToInt16(fValue) * 10;
                            ProgressCell.ShowText = fValue.ToString();
                        }
                        catch
                        {
                            ProgressCell.Value = 0;
                            ProgressCell.ShowText = "";
                        }
                       // PatentRow.Cells[3] = ProgressCell; //指定单元格为上面定义的ProgressCell
    

    值变化重绘时:

    foreach (DataGridViewRow SelectDr in dataGridView2.SelectedRows)
                {
                    SelectDr.Cells["Progress"].Value = value;
                    ((DataGridViewProgressCell)SelectDr.Cells[3]).ShowText = value.ToString();
                }
    

    上图:

  • 相关阅读:
    【Dart学习】-- Dart之匿名方法 & 回调函数 & 闭包
    【Dart学习】-- Dart之异常处理
    【Dart学习】-- Dart之操作符
    【Dart学习】-- Dart之注释
    【dart学习】-- Dart之元数据
    【Dart学习】-- Dart之泛型
    利用Aspose文档转图片
    结合仓库设计MVC控制器
    分享一个点赞超过100的漂亮ASP.NET MVC蓝色界面框架
    开发日记:接口开发设计
  • 原文地址:https://www.cnblogs.com/gsyifan/p/DataGridView_ProgressColumn.html
Copyright © 2020-2023  润新知