gpt4 book ai didi

c# - 自定义 DGV 列/单元格的格式化类型问题

转载 作者:太空宇宙 更新时间:2023-11-03 11:36:49 31 4
gpt4 key购买 nike

我创建了一个显示动画图像的自定义 DataGridView 单元格和列。它非常简单并且工作正常,只是它从 DGV 抛出一个“DataError”事件:“单元格的格式化值类型错误”

我已经从我的两个自定义类中删除了所有代码,但我仍然收到此错误。我检查过继承的 DGV 单元是否从它的基础 DataGridViewImageCell 中提取了正确的 FormatedValueType。

抛出(并捕获)的异常不包含任何堆栈跟踪,因此我无法确定是哪个方法抛出它。

我整理了一个小示例(< 100 行)来说明错误。我希望有人能为我阐明这一点。我以前创建过其他自定义 Cell/Column 类型,但它们一直是基于 System.String 的,我从来没有抛出过这个特定的错误。

代码如下:

using System;
using System.Windows.Forms;

namespace TestBench
{
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new BestFormEver());
}
}

public class BestFormEver : Form
{
public BestFormEver()
{
InitializeComponent();
dataGridView1.Rows.Add(2);
}

protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
}

private void InitializeComponent()
{
this.dataGridView1 = new System.Windows.Forms.DataGridView();
this.Column1 = new PMD.Library.WinFormControls.Controls.DataGridView.ImageColumn.PMDDataGridViewImageColumn();
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
this.SuspendLayout();
this.dataGridView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.Column1});
this.dataGridView1.Location = new System.Drawing.Point(25, 24);
this.dataGridView1.Name = "dataGridView1";
this.dataGridView1.Size = new System.Drawing.Size(454, 206);
this.dataGridView1.TabIndex = 0;
this.Column1.HeaderText = "Column1";
this.Column1.Name = "Column1";
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(508, 259);
this.Controls.Add(this.dataGridView1);
this.Name = "BestFormEver";
this.Text = "BestFormEver";
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
this.ResumeLayout(false);

}

private System.Windows.Forms.DataGridView dataGridView1;
private PMD.Library.WinFormControls.Controls.DataGridView.ImageColumn.PMDDataGridViewImageColumn Column1;
}

public class PMDDataGridViewImageColumn : DataGridViewColumn
{
public PMDDataGridViewImageColumn() : base(new PMDDataGridViewImageCell())
{
}
}

class PMDDataGridViewImageCell : DataGridViewImageCell
{
public PMDDataGridViewImageCell()
{
}
}
}

最佳答案

您需要重写 PMDDataGridViewImageCell 类中的 GetFormattedValue() 方法并让它返回一个值(任何值都可以,甚至是 null)。

使用您的示例,我添加了一个返回 SystemIcons.Question 的覆盖——异常现在消失了,图标在网格中正确显示。

希望这对您有所帮助。

关于c# - 自定义 DGV 列/单元格的格式化类型问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6010383/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com