Ps0a Labs

I take the right pills (.Net, Teatro,Web, Ciclismo)

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.