A coluna DataGridView personalizada é duplicada ao usá-la no Designer
Eu criei um componente DataGridView personalizado que possui um DataGridViewImageColumn padrão. Uma nova propriedade altera a visibilidade da coluna quando não preciso em uma tabela específica. Eu adiciono a coluna no construtor e a atualizo no evento CellFormatting. Essa é a parte que funciona como pretendido.
Quando solto o controle em um novo formulário, ele aparece com a nova coluna. A execução do programa resulta em duas colunas de imagem na grade.
Um novo formulário acabou de adicionar o componente e definir Dock.Fill
Quando inicio sem alterar nada, ele mostra duas colunas. A primeira está funcionando como deveria e a segunda sempre mostra a imagem x ausente (não havia dados nela, então elas mostram ambos x).
No designer do formulário, há uma coluna de imagem nova adicionada automaticamente.
private CustomDataGridView customDataGridView1;
private System.Windows.Forms.DataGridViewImageColumn dataGridViewImageColumn1;
Quando eu continuo editando no formulário, às vezes acontece que o VS cria ainda mais cópias das mesmas colunas. Para corrigir o problema, tenho que limpar a lista DGV.Columns de vez em quando.
Como posso impedir que o VS copie meus campos?
O código a seguir é a parte mínima para reproduzir o problema.
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);
}
}
Editar: Eu também tentei usarthis.AutoGenerateColumns = false;
como emO DataGridView personalizado adiciona colunas sempre que eu construo disse. Nada muda.
Limpar as colunas listadas no formulário remove a coluna de trabalho e deixa uma coluna dataGridViewImageColumn1, que é apenas uma coluna vazia completa com o nome errado.