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();
            }

上图:

转载于:https://www.cnblogs.com/gsyifan/archive/2011/07/07/DataGridView_ProgressColumn.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个示例代码,它展示了如何使用 C# DataGridView 控件来显示 MySQL 数据库中的数据。 首先,你需要将 MySQL 数据库连接到你的 C# 项目中。可以使用 MySql.Data.MySqlClient 命名空间中的 MySqlConnection 类来实现这一点。 以下是代码示例: ```csharp using MySql.Data.MySqlClient; // 建立数据库连接 MySqlConnection connection = new MySqlConnection("Server=127.0.0.1;Database=mydatabase;Uid=myusername;Pwd=mypassword;"); ``` 在连接到数据库之后,你需要编写一个查询来检索数据。以下是一个基本的示例查询: ```csharp string query = "SELECT * FROM mytable"; ``` 接下来,你需要使用 MySqlCommand 对象将查询发送到 MySQL 数据库,并获取结果集。然后,将结果集绑定到 DataGridView 控件上。 ```csharp // 建立 MySqlCommand 对象 MySqlCommand command = new MySqlCommand(query, connection); // 打开数据库连接 connection.Open(); // 建立 MySqlDataAdapter 对象 MySqlDataAdapter adapter = new MySqlDataAdapter(command); // 建立 DataSet 对象 DataSet dataSet = new DataSet(); // 填充 DataSet adapter.Fill(dataSet); // 绑定结果集到 DataGridView 控件上 dataGridView1.DataSource = dataSet.Tables[0]; // 关闭数据库连接 connection.Close(); ``` 在上面的代码中,我们使用 MySqlCommand 对象将查询发送到 MySQL 数据库,并使用 MySqlDataAdapter 对象将结果集填充到 DataSet 对象中。最后,我们将结果集绑定到 DataGridView 控件上,以便将数据显示在用户界面上。 请注意,这只是一个基本示例。在实际项目中,你可能需要对查询进行更复杂的筛选和排序,并且需要处理数据库连接中的异常情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值