DataGridViewColumn的进度条

时间:2011-09-02 23:00:52

标签: c# winforms datagridview progress-bar

Here Mark Rideout是一位Microsoft开发人员,他解释了如何在DataGridView中创建进度条列,并为DataGridViewProgressColumn类提供了“裸骨”代码。他关于如何将其用于数据绑定datagridviews的说明是:

  

If you are databound, then you can just change the column type of an integer column that has 0 through 100 values.

有些人,包括我自己不明白在数据绑定网格的情况下“更改具有0到100值的整数列的列类型”是什么意思,并且Mark似乎太忙而无法回答。有谁知道它是如何完成的?

以下是我案例的快速示例:

namespace Sample
{
    public class Record
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Progress { get; set; } // This is the int 0-100 field which 
                                          // has data for a progress bar

        public Record()
        {
        }

        public Record(int id, string name, int progress)
        {
            this.Id = id;
            this.Name = name;
            this.Progress= progress;
        }
    }
}

namespace Sample
{
    public partial class SampleForm : Form
    {
        private BindingList<Record> records;

        public SampleForm()
        {
            InitializeComponent();
        }

        public SampleForm(BindingList<Record> records)
        {
            InitializeComponent();
            this.records = records;
        }

        private void SampleForm_Load(object sender, EventArgs e)
        {
            dataGridView1.DataSource = this.records;
        }
    }
}

我应该在什么时候将“Progress”列类型更改为DataGridViewProgressColumn,以及如何完成?

3 个答案:

答案 0 :(得分:7)

据我所知,您需要将此类类型的列绑定到类型为Int32的属性,并且可以包含0到100之间的值(百分比)。

数据录入类:

class Data
{
    public int Progress { get; set; }
}

数据绑定:

var data = new List<Data>() { 
    new Data() { Progress = 50 },
    new Data() { Progress = 60 },
    new Data() { Progress = 30 },
    new Data() { Progress = 92 },
};

this.dataGridView1.DataSource = data;

**这就是它的样子:**

在将文章添加到GridView之前,应该将文章中描述的类添加到项目中。

不要忘记允许的值仅为0到100。

<强>步骤

enter image description here

enter image description here

enter image description here

答案 1 :(得分:0)

我使用VB.NET attached Link无论如何都在C#中,因此您可以轻松理解它。 包含这两个类后,只需在表单中调用命名空间,构建解决方案,然后添加datagridview控件并向控件添加类型为DataGridViewProgressColumn的列。 因此,您可以使用以下代码填充控件。

DataGridView1.Rows.Add(20)
DataGridView1.Rows.Add(20)

P.S我的代码示例是在VB中,但我相信你可以弄清楚C#的等效内容

答案 2 :(得分:0)

这对我有用,所以也许这会对某人有所帮助...

progressBar1.Bounds = dgv.GetCellDisplayRectangle(columnIndex, rowIndex, true);