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