나는 애니메이션 된 이미지를 표시하는 사용자 지정 DataGridView 셀 및 열을 만들었습니다. DGV에서 "DataError"이벤트를 던지고있는 것을 제외하고는 정말 간단하고 효과적입니다. "셀의 형식 값의 유형이 잘못되었습니다."사용자 지정 DGV 열/셀 형식화 된 형식
두 개의 사용자 정의 클래스에서 코드를 모두 제거했으며, 이 오류가 계속 발생합니다. 상속받은 DGV 셀이 기본 DataGridViewImageCell에서 올바른 FormatedValueType을 가져 오는지 확인했습니다.
던져진 (및 잡힌) 예외는 스택 추적을 포함하지 않으므로 어떤 방법으로 던지고 있는지 확인할 수 없습니다.
오류를 설명하는 작은 (< 100 줄) 예제를 함께 정리했습니다. 나는 누군가가 나를 위해 이것에 대해 밝혀 줄 수 있기를 바라고있다. 이전에 다른 사용자 지정 셀/열 형식을 만들었지 만 항상 System.String을 기반으로했으며이 특정 오류가 발생하지 않았습니다.
당신은 당신의 PMDDataGridViewImageCell 클래스의 GetFormattedValue() 메소드를 재정의해야하고 값을 반환해야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()
{
}
}
}
OK, null입니다. null을 반환하면 오류가 발생하지 않습니다 (아마도 base.GetFormattedValue가 throw 됨). 그러나 이유를 이해하지 못합니까? 만약 내가 단순히 내장 된 타입을 확장한다면, 왜 기본 메소드 나 동작을 우회 할 필요가 있을까요? –