2011-05-15 3 views
2

나는 애니메이션 된 이미지를 표시하는 사용자 지정 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() 
     { 
     } 
    } 
} 

답변

2

은 (어떤 값도 널 (null), 할 것) : 여기

는 코드입니다.

예제를 사용하여 SystemIcons.Question을 반환하는 재정의를 추가했습니다. 이제 예외가 사라지고 아이콘이 눈금에 제대로 표시됩니다.

희망이 도움이됩니다.

+0

OK, null입니다. null을 반환하면 오류가 발생하지 않습니다 (아마도 base.GetFormattedValue가 throw 됨). 그러나 이유를 이해하지 못합니까? 만약 내가 단순히 내장 된 타입을 확장한다면, 왜 기본 메소드 나 동작을 우회 할 필요가 있을까요? –

관련 문제