Definir DataGridView.DefaultCellStyle.NullValue como nulo em tempo de design gera erro ao adicionar linhas em tempo de execução
-
09-06-2019 - |
Pergunta
No Visual Studio 2008
- adicione um novo DataGridView a um formulário
- Editar colunas
- Adicione um novo DataGridViewImageColumn
- Abra o CellStyle Builder desta coluna (propriedade DefaultCellStyle)
- Altere o NullValue de System.Drawing.Bitmap para nulo
- Tente adicionar uma nova linha ao DataGridView no tempo de execução (DataGridView1.rows.add ();)
- Você recebe este erro:System.FormatException:O valor formatado da célula tem um tipo errado.
Se você alterar NullValue para System.Drawing.Bitmap (como estava), ainda receberá o mesmo erro ao adicionar uma linha.
Se você definir NullValue em tempo de execução em vez de em tempo de design, não receberá nenhum erro.(dataGridView1.Columns[0].DefaultCellStyle.NullValue = null;)
Você poderia me dizer por que isso acontece?
Solução
Isso pode muito bem ser um bug do designer;se você der uma olhada no arquivo .designer.cs (talvez fazendo uma comparação de antes e depois de definir NullValue como nulo), poderá ver o código que ele gera.
Outras dicas
Cronos está certo.Depois de configurá-lo em tempo de design, ele adiciona isto ao .designer.cs:
dataGridViewCellStyle1.NullValue = "nulo";
Se eu modificar "nulo" para nulo então funciona bem.Eu verifiquei DataGridViewCellStyle.NullValue set_NullValue(Object) e get_NullValue com refletor e acho que um valor de string não deve gerar nenhum erro aqui.
De qualquer forma, tenha cuidado com isso e se quiser definir o tempo de design, não se esqueça de modificar o .design.cs.
Altere o NullValue de System.Drawing.Bitmap para nulo
Ao inserir 'null' no campo NullValue no Designer, você está especificando o valor da string "null".A única maneira de definir NullValue como um valor que não seja de string é defini-lo programaticamente ou modificando você mesmo o código do designer.
A caixa de seleção não pode ter um valor String.Não defina nenhum valor padrão na caixa de diálogo de propriedades do IDE.Eu tinha "Empty" escrito na propriedade RowsDefaultCellStyle.Format e isso causou o erro.Foi auto-infligido.Como solução, eu estava tentando definir o estado da caixa de seleção como desmarcado, mas só precisava excluir o valor da string.
Descobri que é melhor se você simplesmente excluir o item do designer na área Formato e na área de valor nulo padrão.Em seguida, ele retorna ao nulo real.Vou tentar configurá-lo na seção init, longe da porcaria gerada pelo designer.