Custom DataGridView Column dupliziert, wenn es in Designer verwendet wird
Ich habe eine benutzerdefinierte DataGridView-Komponente erstellt, die eine standardmäßige DataGridViewImageColumn enthält. Eine neue Eigenschaft ändert die Sichtbarkeit der Spalte, wenn sie in einer bestimmten Tabelle nicht benötigt wird. Ich füge die Spalte im Konstruktor hinzu und aktualisiere sie beim CellFormatting-Ereignis. Das ist der Teil, der wie vorgesehen funktioniert.
Wenn ich das Steuerelement auf ein neues Formular lege, wird es mit der neuen Spalte darin angezeigt. Das Ausführen des Programms führt zu zwei Bildspalten im Raster.
Ein neues Formular hat gerade die Komponente hinzugefügt und Dock.Fill @ gesetz
Wenn ich es starte, ohne etwas zu ändern, werden mir zwei Spalten angezeigt. Das erste funktioniert so, wie es sollte und das zweite zeigt immer das fehlende x-Bild (es waren keine Daten enthalten, sodass beide das x zeigen).
Im Designer des Formulars wird automatisch eine neue Bildspalte hinzugefügt.
private CustomDataGridView customDataGridView1;
private System.Windows.Forms.DataGridViewImageColumn dataGridViewImageColumn1;
Wenn ich das Formular weiter bearbeite, kann es vorkommen, dass VS noch mehr Kopien derselben Spalten erstellt. Um das Problem zu beheben, muss ich ab und zu die DGV.Columns-Liste löschen.
Wie kann ich verhindern, dass VS meine Felder kopiert?
Der folgende Code ist der minimale Teil, um das Problem zu reproduzieren.
public class CustomDataGridView : DataGridView
{
private DataGridViewImageColumn EditStatusIcons;
private bool hasIcons = true;
public bool HasIcons
{
get { return this.hasIcons; }
set
{
if (this.Columns["EditIcons"] == null) return;
this.Columns["EditIcons"].Visible = value;
this.hasIcons = value;
}
}
public CustomDataGridView()
{
this.EditStatusIcons = new System.Windows.Forms.DataGridViewImageColumn();
this.EditStatusIcons.HeaderText = "";
this.EditStatusIcons.Name = "EditStatusIcons";
this.Columns.Add(this.EditStatusIcons);
}
}
Bearbeiten Ich habe auch versucht, @ zu verwendthis.AutoGenerateColumns = false;
wie inCustom DataGridView fügt bei jeder Erstellung von @ Spalten hin sagte. Nichts verändert sich
Das Löschen der Spaltenliste im Formular entfernt die Arbeitsspalte und hinterlässt eine Spalte dataGridViewImageColumn1, die nur eine leere Spalte mit dem falschen Namen ist.