Usando a linha para novos registros no controle DataGridView dos Windows Forms

Quando você usa um DataGridView para editar dados em seu aplicativo, geralmente deseja dar aos usuários a capacidade de adicionar novas linhas de dados ao armazenamento de dados. O DataGridView controle oferece suporte a essa funcionalidade fornecendo uma linha para novos registros, que é sempre mostrada como a última linha. Ela é marcada com um símbolo de asterisco (*) em seu cabeçalho de linha. As seções a seguir tratam de algumas coisas que você deve considerar quando programar com a linha de novos registros habilitada.

Exibindo a linha de novos registros

Use a propriedade para indicar se a AllowUserToAddRows linha para novos registros é exibida. O valor padrão dessa propriedade é true.

Para o caso de associação de dados, a linha para novos registros será mostrada se a propriedade do controle e a AllowUserToAddRowsIBindingList.AllowNew propriedade da fonte de dados forem ambas true. Se uma delas for false, a linha não será exibida.

Preenchendo a linha de novos registros com os dados padrão

Quando o usuário seleciona a linha para novos registros como a linha atual, o controle gera o DataGridViewDefaultValuesNeeded evento.

Esse evento fornece acesso ao novo DataGridViewRow e permite que você preencha a nova linha com dados padrão. Para obter mais informações, consulte Como especificar valores padrão para novas linhas no controle DataGridView dos Windows Forms

A coleção de linhas

A linha para novos registros está contida na DataGridView coleção do Rows controle, mas se comporta de forma diferente em dois aspectos:

Personalização visual da linha de novos registros

Quando a linha para novos registros é criada, ela se baseia na linha especificada pela RowTemplate propriedade. Qualquer estilo de célula que não for especificado para essa linha será herdado de outras propriedades. Para obter mais informações sobre herança de estilo de célula, consulte Estilos de célula no controle DataGridView dos Windows Forms.

Os valores iniciais exibidos pelas células na linha para novos registros são recuperados da propriedade de cada célula DefaultNewRowValue . Para células do tipo DataGridViewImageCell, essa propriedade retorna uma imagem de espaço reservado. Caso contrário, essa propriedade retornará null. Você pode substituir essa propriedade para retornar um valor personalizado. No entanto, esses valores iniciais podem ser substituídos por um manipulador de DefaultValuesNeeded eventos quando o foco entra na linha para novos registros.

Os ícones padrão do cabeçalho dessa linha, que são uma seta ou um asterisco, não são expostos publicamente. Se você quiser personalizar os ícones, será necessário criar uma classe personalizada DataGridViewRowHeaderCell .

Os ícones padrão usam a ForeColor propriedade do em uso pela célula de cabeçalho de DataGridViewCellStyle linha. Os ícones padrão não serão renderizados se não houver espaço suficiente para exibi-los completamente.

Se a célula do cabeçalho de linha tiver um valor de cadeia de caracteres definido e, se não houver espaço suficiente para o texto e o ícone, o ícone será descartado primeiro.

Classificação

No modo não acoplado, novos registros sempre serão adicionados ao final do DataGridView mesmo que o usuário tenha classificado o conteúdo do DataGridView. O usuário precisará aplicar a classificação novamente para classificar a linha para a posição correta; Esse comportamento é semelhante ao do ListView controle.

Em modos virtuais ou com associação de dados, o comportamento de inserção quando uma classificação for aplicada dependerá da implementação do modelo de dados. Para ADO.NET, a linha é imediatamente classificada na posição correta.

Outras observações sobre a linha de novos registros

Não é possível definir a Visible propriedade desta linha como false. Um InvalidOperationException é gerado se isso for tentado.

A linha de novos registros sempre é criada no estado desmarcado.

Modo virtual

Se estiver implementando o modo virtual, você precisará monitorar quando uma linha de novos registros é necessária no modelo de dados e o momento para reverter a adição da linha. A implementação exata dessa funcionalidade depende da implementação do modelo de dados e de sua semântica de transação, por exemplo, se o escopo de confirmação está no nível da célula ou da linha. Para obter mais informações, consulte Modo virtual no controle DataGridView dos Windows Forms.

Confira também