VB  .NET - Inserindo e excluindo informações manualmente em Dataset
                                                                      e formatando a saida em um DataGrid


Neste artigo vou tratar uma questão muito comum em sistema comerciais: a inclusão manual de informações em um dataset, por exemplo, quando você esta criando uma tela de pedidos e pede pro usuario incluir os itens deste pedido. Estes itens devem ser salvos em alguma lugar que não o Banco de Dados, por questões diversas, então mãos a obras.

1) Inicie um novo projeto Windows Application.

2) Insira neste projeto 3 Caixas de Texto, 3 Labels, 3 Botões e 1 Datagrid e altere a propriedade ID do objeto como mostra a figura abaixo:

3) Inclua as linhas abaixo antes de qualquer classe, na área de declaração de variáveis:

Dim tbProdutos As New DataTable()
Dim rowNew As DataRow
Dim dsProdutos As New DataSet()


A primeira linha declara uma nova Tabela, a segunda linha declara uma variavel do tipo DataRow que servirá para incluir as linhas no DataSet e a terceira variavel declara um novo DataSet.

4) No evento Form_Load adicione o seguinte código:

dsProdutos.Tables.Add(tbProdutos)
dsProdutos.Tables(0).Columns.Add("Item", GetType(Integer))
dsProdutos.Tables(0).Columns(0).AutoIncrement = True
dsProdutos.Tables(0).Columns(0).AutoIncrementSeed = 1

dsProdutos.Tables(0).Columns(0).AutoIncrementStep = 1
dsProdutos.Tables(0).Columns(0).Unique = True
dsProdutos.Tables(0).Columns.Add("Produto", GetType(String))

dsProdutos.Tables(0).Columns.Add("Quantidade", GetType(Decimal))
dsProdutos.Tables(0).Columns.Add("DataEntrega", GetType(Date))
dtgProdutos.DataSource = dsProdutos.Tables(0)


O codigo acima cria a tabela tbProdutos no DataSet dsProdutos e adiciona a elas as colunas especificadas passando os tipos de dados das mesmas. Algo que pode ser um pouco diferente são as linhas 3, 4, 5 e 6 que fazem com que a coluna item seja Auto incrementada de 1 em 1 e seja única, quer dizer, não pode haver 2 codigo iguais. A ultima linha vincula o DataGrid ao DataSet.

5) No evento Click do botão Incluir, adicione o seguinte codigo:

r
owNew = dsProdutos.Tables(0).NewRow
rowNew("Produto") = txtProduto.Text
rowNew("Quantidade") = txtQuantidade.Text
rowNew("DataEntrega") = txtDataEntrega.Text
dsProdutos.Tables(0).Rows.Add(rowNew)
dsProdutos.AcceptChanges()


O codigo acima inclui uma nova linha ao Dataset.

6) No evento Click do botão Excluir, adicione o seguinte codigo:

Dim rowSelected() As DataRow
rowSelected = dsProdutos.Tables(0).Select("Item = '" & _ dtgProdutos.Item(dtgProdutos.CurrentRowIndex, 0) & "'")
dsProdutos.Tables(0).Rows.Remove(rowSelected(0))


O codigo acima excluir um item do Grid, a primeira linha declara uma variavel do tipo DataRow, a Segunda linha faz uma busca do DataGrid pela coluna Item e armazena a linha que retorna na variavel criada e a terceira linha remove a linha encontrada do DataSet.

7) No evento Click do botão Limpar, adicione o seguinte codigo:

dsProdutos.Tables(0).Rows.Clear()

O codigo acima simplesmente exclui todas as linhas da tabela.

Pronto, o código de inclusão e exclusão de itens já funciona, mas, vamos analisar alguns detalhes. Veja a figura abaixo:

i

Note que a área circulada requer um tipo de formatação especifica, e é isso que iremos fazer agora. Atenção neste ponto que é um ponto pouco mencionado em artigos e documentações.

8) Selecione o DataGrid e localiza a propriedade TableStyle e clique no 3 pontos para abrir a janela.

9) Na janela que se abriu altere as propriedades:

Name: TableStyle1
MappingName: Table1


10) Localize a propriedade GridColumnStyle e clique nos 3 pontos para abrir a janela.

11) É nesta janela que iremos definir o tipo de dados que aparecerá no grid, qual o cabeçalho de cada coluna e qual a largura de cada coluna. Para Isso clique em Add para abrir um novo estilo e altere as seguintes propriedades:

Name: colItem
HeaderText: Item
Width: 60
MappingName: Item


12) Adicione mais 3 estilos e troque a propriedade de cada um deles conforme abaixo:

Name: colProduto
HeaderText: Produto
Width: 200
MappingName: Produto

Name: colQuantidade
HeaderText: Quantidade
Width: 75
Format: n2
MappingName: Quantidade

Name: colDataEntrega
HeaderText: Data de Entrega
Width: 150
Format: D
MappingName: DataEntrega

Pronto agora fazendo o mesmo teste que fizemos antes da formatação teremos este resultado:

Bem, espero que tenha ajudado com este artigo, quando precisarem de mim estamos aí.

Giovanni Souza Moreira
Analista de Sistemas
giovannimoreira@hotmail.com