 VB.NET
2008 - Protótipo para Sistema de Vendas com LINQ - II
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.BackColor End 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.
 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