Definir DataGridView.DefaultCellStyle.NullValue como nulo em tempo de design gera erro ao adicionar linhas em tempo de execução

StackOverflow https://stackoverflow.com/questions/48271

  •  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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top