将数据绑定 DataGridView 上的单元格类型更改为自定义 DataGridViewCell 类型

Posted

技术标签:

【中文标题】将数据绑定 DataGridView 上的单元格类型更改为自定义 DataGridViewCell 类型【英文标题】:Change Cell Type on Databound DataGridView to Custom DataGridViewCell Type 【发布时间】:2010-10-29 13:21:14 【问题描述】:

我正在使用this article 中的代码创建一个 DataGridViewProgressCell,它采用 0 到 100 之间的整数,并将值显示为百分比以及一个看起来像 DataGridView 单元格中的进度条的图像。

当我不使用数据绑定 DataGridView 时,这可以正常工作,但是当我将数据绑定到具有整数属性的对象列表时,我无法弄清楚如何告诉 DataGridView 特定列应被视为新的 DataGridViewProgressCell 类型。

在下面的代码中 Percent 是 Car 对象的整数属性。我得到的错误是运行时错误:

Value provided for CellTemplate must be of type System.Windows.Forms.DataGridViewTextBoxCell or derive from it.

代码如下:

namespace GridViewSample

   public partial class Form1 : Form
   
       private SortableBindingList<Car> carlist = new SortableBindingList<Car>();

       public Form1()
       
          InitializeComponent();

          // databind the datagridview to the car list
          dataGridView1.DataSource = carlist;

          DataGridViewCell cell = new DataGridViewProgressCell();

          // run time error occurs on this line
          dataGridView1.Columns["Percent"].CellTemplate = new DataGridViewProgressCell();
       
   

【问题讨论】:

【参考方案1】:

如果我正确理解您的问题,这就是我的答案。我有一个 datetimepickercolumn,我把它作为 CellTemplate 就可以了。

添加列时,我将 datetimepickercolumn 指定为模板。

private void dgvFechas_ColumnAdded(object sender, DataGridViewColumnEventArgs e) 
 try 
   //Evalua si el tipo de dato es DateTime.
   if(e.Column.ValueType == typeof(DateTime)) 
        e.Column.CellTemplate = new CalendarCell();
    
 
 catch(Exception ex)  

希望这会有所帮助。

【讨论】:

【参考方案2】:

默认情况下,DGV 会自动填充列。如果要使用自定义列,则需要手动填充列。首先设置DataGridView.AutoGenerateColumns = false,然后添加您需要的列,而不是尝试更改现有(自动填充)列的模板。

【讨论】:

那么,将 AutoGenerateColumns 设置为 false,手动定义列,然后将 DataSource 设置为绑定列表,对吗?按那个顺序? 唯一重要的顺序是在设置 DataSource 属性之前 AutoGenerateColumns 必须为 false,尽管在添加数据之前添加列似乎是合乎逻辑的。

以上是关于将数据绑定 DataGridView 上的单元格类型更改为自定义 DataGridViewCell 类型的主要内容,如果未能解决你的问题,请参考以下文章

如何获取与表连接绑定的 Row datagridview selectedItem 的每个单元格的值?

原创datagridview动态绑定contextmenustrip,并复制单元格数据

c# datagridview 绑定时 改变单元格的值

在DataGridView中绑定数据源之后,怎样通过验证输入数据格式是不是与单元格格式一致

DataGridView 绑定到已键入的 DataTable 时显示空单元格

c# winform datagridview界面上的行删了,但datagridview数据源没有同步如何解决