Auto insert Guid Datatable in DataGridView
Quando precisamos inserir linhas em uma Datatable através de uma DataGridView, em algumas situações, a chave primária desta tabela é uma GUID (globally unique identifier). Nestes casos não queremos que o usuário digite o código, entretanto por ser uma chave primária também não é possível deixá-lo como DBNull para ser preenchido pelo banco de dados.
Encontrei alguma referência na web dizendo para definir o DefaultValue da coluna com o valor System.Guid.NewGuid().
Ok, isso funciona para o primeiro registro inserido na Grid, mas a partir deste ponto o problema persiste, apenas muda de nome, agora o programa não reclama mais que a chave primária está nula mas reclama que o valor definido já esta sendo utilizado.
A forma qu encontrei para resolver isto foi a seguinte:
No Load do formulário defina o DefaultValue e altere ele a cada linha adicionada criando um DataGridViewRowsAddedEventHandler e adicionando-o ao datagrid.
Ex.:
private void Frm1_Load(object sender, EventArgs e)
{
dataGridView1.RowsAdded += new DataGridViewRowsAddedEventHandler(changeDefaultPK);
this.MyDataSet.MyTable.Columns[0].DefaultValue = System.Guid.NewGuid();
}
void changeDefaultPK (object sender, DataGridViewRowsAddedEventArgs e)
{
this.MyDataSet.MyTable.Columns[0].DefaultValue = System.Guid.NewGuid();
}
Como sempre, sugestões diferentes são sempre bem-vindas. Encontrei sugestões na web para se criar um custom datacolumn (veja aqui), mas para o que eu estava precisando a solução acima atendeu.
Assim que eu tiver um tempo extra talvez crie um componente e disponibilize aqui.
Enviar por e-mail. Hits para esta publicação: 178.
Deixe uma resposta.