将数据绑定 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,并复制单元格数据
在DataGridView中绑定数据源之后,怎样通过验证输入数据格式是不是与单元格格式一致