VB.NET
2008 - Protótipo para Sistema de Vendas com LINQ - II
Na primeira parte deste artigo eu defini o escopo da protótipo de vendas, criei o banco de dados e as tabelas , criei os formulários para cadastrar Clientes e Produtos usando o assistente de configuração do Visual Basic 2008 Express Edition e gerei o mapeamento objeto relacional usando o LINQ. Desta forma temos o ambiente preparado para criar a nossa aplicação de Vendas.
Vamos criar o formulário de menu da aplicação. Selecione no menu Project a opção Add Windows Forms e a seguir marque o template Windows Forms e informe o nome Menu.vb;

Vamos definir o formulário Menu.vb como um container MDI para isso defina sua propriedade IsMDIContainer igual True.
A partir da toolbox , na guia Menus & ToolBars , arraste o componente MenuStrip para o formulário e crie as opções conforme o leiaute da figura abaixo:

|
Nota: para
alterar a cor de fundo de um container MDI não basta definir sua propriedade
BackColor além disso devemos usar o seguinte código no evento Load do
formulário: Private Sub Menu_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
ctl.BackColor = Me.BackColorEnd If Next ctl End Sub |
Vamos agora definir para cada uma das opções, a abertura do formulário correspondente, usando o evento Click de cada item do menu no controle MenuStrip.
Private Sub ClientesToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ClientesToolStripMenuItem.Click
My.Forms.Clientes.MdiParent = Me
My.Forms.Clientes.Show()
End Sub
Private Sub ProdutosToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProdutosToolStripMenuItem.Click
My.Forms.Produtos.MdiParent = Me
My.Forms.Produtos.Show()
End Sub
Private Sub VendasToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VendasToolStripMenuItem.Click
My.Forms.frmVendas.mdiparent = Me
My.Forms.frmVendas.show()
End Sub
Private Sub PedidosToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PedidosToolStripMenuItem.Click
My.Forms.Pedidos.MdiParent = Me
My.Forms.Pedidos.Show()
End Sub
|
Veja também o
meu artigo:
VB.NET 2005 - Tocando arquivos
WAV
que fala sobre o recurso My.
O código acima simplesmente abre o respectivo formulário no containter MDI usando o recurso My. Os formulários Clientes e Produtos já foram criados faltam ser criados o formulário frmVendas e Pedidos.
A próxima tarefa será criar dois formulários , um para Produtos e outro para Clientes. Eles serão usados para permitir a busca e seleção de um determinado produto/cliente. Eu poderia usar o recurso de herança visual mas para não complicar resolvi criar dois formulário distintos.
Criando o formulário para seleção Produtos
A partir do menu Project selecione Add Windows Forms e informe o nome frmProdutos. A seguir inclua um controle TextBox, um controle DataGridView e dois Controles Buttons conforme o leiaute da figura abaixo:

Defina também a propriedade StartPosition como sendo igual a CenterParent.
Vejamos agora o código deste formulário:
1- Inicialmente vamos instanciar a classe JcmSoftDataContext para ter acesso aos objetos mapeados para o banco de dados:
'Instanciamos un
objeto da clase JcmSoftDataContext
Dim bd As New JcmSoftDataContext
'Declaramos uma
variavel codigo como publica
Public codigo As String
2- No evento Load do formulário vou usar uma consulta LINQ para obter uma relação de produtos por ordem de nome e atribuir o resultado ao DataGridView.
Private Sub frmProdutos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Este codigo usa una consulta LINQ
'para obter una sequecia IEnumerable de objetos Produtos
Dim produtos = From prod In bd.Produtos _
Select prod.ProdutoID, prod.Nome, prod.preco, prod.estoque _
Order By Nome Ascending
Me.dgvProdutos.DataSource = produtos.ToList
End Sub
|
3-) No evento Click do botão Selecionar temos o código onde obtemos o índice do elemento selecionado e capturamos o código da coluna ClienteID atribuindo-o a variável codigo que foi definida como pública no início do formulário;
Private Sub btnSelecionar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSelecionar.Click
'Obtemos o índice do elemento selecionado no DataGridView
Dim row As Integer = Me.dgvProdutos.CurrentRow.Index
'Obtem o elemento da coluna ClienteID
codigo = Me.dgvProdutos.Item("ProdutoID", row).Value.ToString
'Definimos como OK o resultado da janela de diálogo
Me.DialogResult = System.Windows.Forms.DialogResult.OK
'fecha o formulário
Me.Close()
End Sub
|
4-) No evento Click do botão Cancelar temos o código que cancela e fecha o formulário;
Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
'define como CANCEL o resultado da janela de diálogo
Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
'fecha o formulario
Me.Close()
End Sub
|
5-) No evento TextChanged do TextBox txtNomeProduto incluímos o código abaixo. Com ele a medida que o usuário digita cada caractere na caixa de texto é criada uma consulta LINQ dinâmica que vai filtrando os produtos e exibindo no DataGridView;
Private Sub txtNomeProduto_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtNomeProduto.TextChanged
'Este codigo usa uma consulta LINQ para obter una sequencia
'IEnumerable de objetos Clientes com base no criterio informado
'na caixa de texto txtNomeCliente que é concatenado
'com o caractere (*) simulando a funcionalidade (%) do SQL
'para ser usada na expressão LIKE da consulta LINQ
Dim criterio As String
'concatenamos o texto informado no controle com o coringa (*)
criterio = Me.txtNomeProduto.Text & "*"
Dim produtos = From prod In bd.Produtos _
Where prod.Nome Like criterio _
Select prod.ProdutoID, prod.Nome, prod.preco, prod.estoque _
Order By Nome Ascending
'Atribuimos como origem de dados ao DataGridView1
'o resultado da consulta LINQ
Me.dgvProdutos.DataSource = produtos.ToList
End Sub
|
Executando o projeto e abrindo o formulário de busca de produtos se digitarmos os caracteres Mo teremos o resultado da figura baixo:

Escolhendo uma linha e clicando no botão Selecionar iremos obter os dados do produto para usar no formulário de vendas.
Criando o formulário para seleção de Clientes
O formulário para busca e seleção de clientes , frmClientes é idêntico ao formulário acima e , como eu já mencionei , poderíamos ter usando a herança visual para criá-lo.
Então de forma resumida a seguir temos o leiaute do formulário frmClientes :

O código do formulário é dado abaixo:
Public Class frmClientes
'Instanciamos un objeto da clase JcmSoftDataContext
Dim bd As New JcmSoftDataContext
'Declaramos uma variavel codigo como publica
Public codigo As String
Private Sub frmClientes_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Este codigo usa una consulta LINQ
'para obter una sequecia IEnumerable de objetos Clientes
Dim clientes = From cli In bd.Clientes _
Select cli.clienteID, cli.nome, cli.email _
Order By nome Ascending
Me.DataGridView1.DataSource = clientes.ToList
End Sub
Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
'Se define como CANCEL o resultado da janela de diálogo
Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
'fecha o formulario
Me.Close()
End Sub
Private Sub btnSelecionar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSelecionar.Click
'Obtemos o índice do elemento selecionado no DataGridView
Dim row As Integer = Me.DataGridView1.CurrentRow.Index
'Obtem o elemento da coluna ClienteID
codigo = Me.DataGridView1.Item("ClienteID", row).Value.ToString
'Definimos como OK o resultado da janela de diálogo
Me.DialogResult = System.Windows.Forms.DialogResult.OK
'fecha o formulário
Me.Close()
End Sub
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtNomeCliente.TextChanged
'Este codigo usa uma consulta LINQ para obter una sequencia
'IEnumerable de objetos Clientes com base no criterio informado
'na caixa de texto txtNomeCliente que é concatenado
'com o caractere (*) simulando a funcionalidade (%) do SQL
'para ser usada na expressão LIKE da consulta LINQ
Dim criterio As String
'concatenamos o texto informado no controle com o coringa (*)
criterio = Me.txtNomeCliente.Text & "*"
Dim clientes = From cli In bd.Clientes _
Where cli.nome Like criterio _
Select cli.clienteID, cli.nome, cli.email _
Order By nome Ascending
'Atribuimos como origem de dados ao DataGridView1
'o resultado da consulta LINQ
Me.DataGridView1.DataSource = clientes.ToList
End Sub
|
Executando o formulário e digitando os caracteres Ma na caixa de texto iremos obter:

Escolhendo uma linha e clicando no botão Selecionar iremos obter os dados do cliente para usar no formulário de vendas.
E com isso acabamos de criar os formulários de menu (Menu.vb) e busca e seleção de clientes (frmClientes.vb) e pedidos (frmProdutos.vb).
Já temos tudo pronto para criar o formulário de vendas (frmVendas.vb) onde poderemos selecionar clientes e produtos, incluir um pedido de venda , calcular o total e dar baixa no estoque dos itens vendidos.
Aguarde a continuação na última parte do artigo : VB.NET 2008 - Protótipo para Sistema de Vendas com LINQ - III
Eu sei , é apenas VB .NET , mas eu gosto...
Referências:
José Carlos Macoratti