Вы находитесь на странице: 1из 18

VB 2008 - Prottipo para sistema de vendas

http://www.macoratti.net/08/05/vbn8_psv.htm

VB.NET 2008 - Prottipo para Sistema de Vendas com LINQ - I


Neste artigo eu vou procurar esclarecer algumas dvidas bsicas relacionadas com o tratamento de informaes localizadas em mltiplas tabelas quais sejam: Como Como Como Como criar um formulrio de busca; selecionar um item em um formulrio e preencher os controles de outros formulrios com estes dados; atualizar tabelas relacionadas; fetuar mltiplas operaes de atualizaes;

! novidade " que eu pretendo fazer isso usando os recursos do LINQ to SQL# $ara poder tratar do assunto criei um pequeno prot%tipo de uma aplica&o para registro de 'endas onde temos as seguintes entidades: Clientes Pedidos Prod tos !etal"esPedidos ( relacionamento entre estas tabelas " o seguinte:

)eu objetivo " mostrar os procedimentos que devem ser feitos *naturalmente estou mostrando uma das possibilidades+ para realizar a opera&o de venda de um produto que envolve os seguintes passos:

1 de

!1/10/201! 12:2

VB 2008 - Prottipo para sistema de vendas

http://www.macoratti.net/08/05/vbn8_psv.htm

,elecionar um Cliente cadastrado; ,elecionar um $roduto cadastrado; -efinir a quantidade da venda; 'erificar o estoque; .egistrar a venda; !tualizar a tabela de pedidos; !tualizar a tabela de detalhes dos pedidos; !tualizar a quantidade do estoque; Calcular o total do pedido; !o lado temos o formulrio de 'endas onde ser&o realizadas todas as operaes relacionadas#

u estou usando as seguintes ferramentas neste projeto: Vis al Basic 2008 E#press Edition SQL Ser$er 200% E#press Edition /oi criado o banco de dados &cmSo't.md' contendo as tabelas: Clientes( Prod tos( Pedidos e !etal"esPedidos# (s campos de cada uma destas tabela pode ser visualizado na figura abai0o:

'amos iniciar criando um novo projeto do tipo 1indo2s /orms !pplication 3 !brindo o '4 5667 0press e selecionando a op&o )ile -* Ne+ Pro,ect e informando nome do projeto como : Vendas# 'amos criar uma fonte de dados usando a op&o !ata -* -dd Ne+ !ata So rce do menu; 8 ! seguir selecione a op&o !ataBase e clique em Ne#t*; 8 -efina uma cone0&o com o banco de dados &cmSo't.md' 3 clicando no bot&o Ne+ Connection e selecionando a cone0&o ,9: ,erver e a seguir o banco de dados3 ao final clique em Ne#t*. 8 ! seguir e0panda os objetos Ta/les e selecione as tabelas relacionadas:

2 de

!1/10/201! 12:2

VB 2008 - Prottipo para sistema de vendas

http://www.macoratti.net/08/05/vbn8_psv.htm

!ceite o nome padr&o dado ao !ataSet e clique em )inis"; 'oc; ver na <anela ,olution 0plorer o dataset &cmSo't!ataSet# Clique duas vezes sobre ele para visualizar a estrutura da fonte de dados criada;

Note que temos definidas as chaves primrias 3 chaves estrangeiras e os relacionamentos entre as tabelas# u criei este !ata So rce para poder criar os formulrios para cadastrar Clientes e Prod tos# $oderia ter usado o :=N9 mas como o meu foco ser o formulrio de 'endas resolvi criar estes formulrios rapidamente j prontos com os recursos para incluir3 alterar e e0cluir dados# $ara criar o formulrio de Clientes 3 inclua um novo formulrio no projeto a partir do menu Pro,ect op01o -dd 2indo+s )orms3 e informe o nome Clientes#vb# ! seguir abra a janela !ata So rces e no dataset selecione a tabela Clientes alterando o seu modo de apresenta&o para !etails# !p%s isso arraste e solte a tabela no formulrio Clientes#vb# ,er&o criados os controles vinculados3 os recursos para navega&o e as funcionalidades para incluir3 alterar e e0cluir dados#

! de

!1/10/201! 12:2

VB 2008 - Prottipo para sistema de vendas

http://www.macoratti.net/08/05/vbn8_psv.htm

$ara criar o formulrio de Prod tos 3 inclua um novo formulrio no projeto a partir do menu Pro,ect op&o -dd 2indo+s )orms3 e informe o nome Prod tos.$/# ! seguir abra a janela !ata So rces e no dataset selecione a tabela Prod tos alterando o seu modo de apresenta&o para !etails# !p%s isso arraste e solte a tabela no formulrio Prod tos.$/# ,er&o criados os controles vinculados3 os recursos para navega&o e as funcionalidades para incluir3 alterar e e0cluir dados#

Com isso j podemos cadastrar produtos e clientes que ser&o usados para registrar as vendas de produtos# 'amos preparar o ambiente para usar os recursos do LINQ To SQL. No menu Pro,ect selecione a op&o -dd ne+ Item e na janela Templates selecione o item LINQ To SQL Classes informando o nome &cmSo't.d/ml e clicando em -dd.

" de

!1/10/201! 12:2

VB 2008 - Prottipo para sistema de vendas

http://www.macoratti.net/08/05/vbn8_psv.htm

Neste momento ser e0ibida a janela do descritor 3/,eto 4elacional# 0panda os objetos do banco de dados &cmSo't.md' e selecione as tabelas Clientes( !etal"esPedidos( Pedidos e Prod tos arrastando e soltando na janela 3/,ect 4elational !esi5ner;

!s tabelas do banco de dados ser&o mapeadas como classes *campos como propriedades, procedures e funes como mtodos+ e voc; ter no !escritor as classes que representam os objetos do banco de dados; Cada propriedade definida em cada objeto esta mapeada para cada coluna de cada tabela# ( arquivo &cmSo't.d/ml cont"m o arquivo >): com informaes sobre o leiaute das tabelas que foram mapeadas e tamb"m o descritor contendo as classes geradas pelo mapeamento# !p%s encerrar o mapeamento voc; j ter acesso aos recursos do LINQ To SQL com direito a intellisense completo das informaes referente as tabelas mesmo sem conhecer nada sobre elas# ,e voc; observar as propriedades do !ataConte#t gerado ir perceber que o nome dado ao conte0to " &cmSo't!ataConte#t e ver tamb"m a cone0&o com o banco de dados &cmSo't.md'

5 de

!1/10/201! 12:2

VB 2008 - Prottipo para sistema de vendas

http://www.macoratti.net/08/05/vbn8_psv.htm

( 4anco de dados " mapeado em um objeto !ataConte#t permitindo acesso a tabelas de forma transparente sem termos que nos preocupar com cone0&o# ?eremos que apenas usar os recursos do LINQ To SQL. ( !ataConte#t " o responsvel por gerar as instrues ,9: da sua linguagem de consulta e ent&o mapear as linhas de dados retornadas a partir do seu banco de dados para objetos# Neste momento temos o ambiente pronto para usar os recursos do LINQ# Na segunda parte do artigo eu vou criar os formulrios de consulta e de menu da aplica&o para em seguida criar o formulrio de vendas onde ser&o realizadas as operaes de atualizaes das tabelas# !guarde: VB.NET 2008 - Prottipo para Sistema de Vendas com LINQ - II u sei 3 " apenas '4 #N ? 3 mas eu gosto###
<os" Carlos )acoratti

de

!1/10/201! 12:2

VB .NET - Prottipo para sistema de vendas em LINQ

http://www.macoratti.net/0 /0!/v"n#psv$.htm

VB.NET 2008 - Prottipo para Sistema de Vendas com LINQ - II


Na primeira parte deste artigo eu defini o escopo da prottipo de vendas, criei o banco de dados e as tabelas , criei os formulrios para cadastrar Clientes e Produtos usando o assistente de configurao do Visual Basic 200 !"press !dition e gerei o mapeamento ob#eto relacional usando o $%N&' (esta forma temos o ambiente preparado para criar a nossa aplicao de Vendas' Vamos criar o formulrio de menu da aplicao' )elecione no menu Project a opo Add mar*ue o temp#ate +indo,s -orms e informe o nome $en%.&'. indo!s "orms e a seguir

Vamos definir o formulrio $en%.&' como um container $(I para isso defina sua propriedade Is$(I)ontainer igual Tr%e' / partir da toolbo" , na guia $en%s * Too#Bars , arraste o componente $en%Strip para o formulrio e crie as op0es conforme o leiaute da figura abai"o1

Nota+ para a#terar a cor de ,%ndo de %m container $(I n-o 'asta de,inir s%a
propriedade Bac.)o#or a#/m disso de&emos %sar o se0%inte cdi0o no e&ento Load do ,orm%#1rio+
Private )ub 2enu3$oad4B5Val sender /s )5stem'6b#ect, B5Val e /s )5stem'!vent/rgs7 8andles 25Base'$oad

% de !

&%/%0/$0%& %$:$'

VB .NET - Prottipo para sistema de vendas em LINQ

http://www.macoratti.net/0 /0!/v"n#psv$.htm

-or !ac9 ctl /s Control %n 2e'Controls %f :5pe6f ctl %s 2diClient :9en ctl'Bac;Color < 2e'Bac;Color !nd %f Ne"t ctl !nd )ub

Vamos agora definir para cada uma das op0es, a abertura do formulrio correspondente, usando o evento )#ic. de cada item do menu no controle $en%Strip'
Private )ub Clientes:ool)trip2enu%tem3Clic;4B5Val sender /s )5stem'6b#ect, B5Val e /s )5stem'!vent/rgs7 8andles Clientes:ool)trip2enu%tem'Cli 25'-orms'Clientes'2diParent < 2e $2."orms.)#ientes.S3o!45 !nd )ub Private )ub Produtos:ool)trip2enu%tem3Clic;4B5Val sender /s )5stem'6b#ect, B5Val e /s )5stem'!vent/rgs7 8andles Produtos:ool)trip2enu%tem' 25'-orms'Produtos'2diParent < 2e $2."orms.Prod%tos.S3o!45 !nd )ub Private )ub Vendas:ool)trip2enu%tem3Clic;4B5Val sender /s )5stem'6b#ect, B5Val e /s )5stem'!vent/rgs7 8andles Vendas:ool)trip2enu%tem'Clic 25'-orms'frmVendas'mdiparent < 2e $2."orms.,rmVendas.s3o!45 !nd )ub Private )ub Pedidos:ool)trip2enu%tem3Clic;4B5Val sender /s )5stem'6b#ect, B5Val e /s )5stem'!vent/rgs7 8andles Pedidos:ool)trip2enu%tem'Cl 25'-orms'Pedidos'2diParent < 2e $2."orms.Pedidos.S3o!45 !nd )ub

Ve#a tamb=m o meu artigo1 VB.NET 2006 - Tocando ar7%i&os

AV 7%e ,a#a so're o rec%rso $2.

6 cdigo acima simplesmente abre o respectivo formulrio no containter 2(% usando o recurso $2' 6s formulrios )#ientes e Prod%tos # foram criados faltam ser criados o formulrio ,rmVendas e Pedidos' / pr"ima tarefa ser criar dois formulrios , um para Prod%tos e outro para )#ientes' !les sero usados para permitir a busca e seleo de um determinado produto>cliente' !u poderia usar o recurso de 9erana visual mas para no complicar resolvi criar dois formulrio distintos'

)riando o ,orm%#1rio para se#e8-o Prod%tos


/ partir do menu Project selecione Add indo!s "orms e informe o nome ,rmProd%tos' / seguir inclua um controle :e"tBo", um controle (ata?ridVie, e dois Controles Buttons conforme o leiaute da figura abai"o1

(efina tamb=m a propriedade StartPosition como sendo igual a )enterParent' Ve#amos agora o cdigo deste formulrio1 @A %nicialmente vamos instanciar a classe 9cmSo,t(ata)onte:t para ter acesso aos ob#etos mapeados para o banco de dados1

$ de !

&%/%0/$0%& %$:$'

VB .NET - Prottipo para sistema de vendas em LINQ

http://www.macoratti.net/0 /0!/v"n#psv$.htm

B%nstanciamos un ob#eto da clase Ccm)oft(ataConte"t (im bd /s Ne, Ccm)oft(ataConte"t B(eclaramos uma variavel codigo como publica Public codigo /s )tring 2A No evento Load do formulrio vou usar uma cons%#ta LINQ para obter uma relao de produtos por ordem de nome e atribuir o resultado ao (ata;ridVie!'
Private )ub frmProdutos3$oad4B5Val sender /s )5stem'6b#ect, B5Val e /s )5stem'!vent/rgs7 8andles 25Base'$oad B!ste codigo usa una consulta $%N& Bpara obter una se*uecia %!numerable de ob#etos Produtos (im produtos < "rom prod In 'd.Prod%tos < Se#ect prod.Prod%toI(= prod.Nome= prod.preco= prod.esto7%e < >rder B2 Nome Ascendin0 2e'dgvProdutos'(ata)ource < produtos':o$ist !nd )ub

DA7 No evento )#ic. do boto Se#ecionar temos o cdigo onde obtemos o Endice do elemento selecionado e capturamos o cdigo da coluna )#ienteI( atribuindoAo a varivel codi0o *ue foi definida como pFblica no inEcio do formulrio.
Private )ub btn)elecionar3Clic;4B5Val sender /s )5stem'6b#ect, B5Val e /s )5stem'!vent/rgs7 8andles btn)elecionar'Clic; B6btemos o Endice do elemento selecionado no (ata?ridVie, (im ro, /s %nteger < 2e'dgvProdutos'CurrentGo,'%nde" B6btem o elemento da coluna Cliente%( codi0o ? $e.d0&Prod%tos.Item4@Prod%toI(@= ro!5.Va#%e.ToStrin0 B(efinimos como 6H o resultado da #anela de dilogo 2e'(ialogGesult < )5stem'+indo,s'-orms'(ialogGesult'6H Bfec9a o formulrio 2e'Close47 !nd )ub

IA7 No evento Clic; do boto Cancelar temos o cdigo *ue cancela e fec9a o formulrio.
Private )ub btnCancelar3Clic;4B5Val sender /s )5stem'6b#ect, B5Val e /s )5stem'!vent/rgs7 8andles btnCancelar'Clic; Bdefine como C/NC!$ o resultado da #anela de dilogo 2e'(ialogGesult < )5stem'+indo,s'-orms'(ialogGesult'Cancel Bfec9a o formulario 2e'Close47 !nd )ub

JA7 No evento Te:t)3an0ed do :e"tBo" t:tNomeProd%to incluEmos o cdigo abai"o' Com ele a medida *ue o usurio digita cada caractere na cai"a de te"to = criada uma consulta $%N& dinKmica *ue vai filtrando os produtos e e"ibindo no (ata?ridVie,.
Private )ub t"tNomeProduto3:e"tC9anged4B5Val sender /s )5stem'6b#ect, B5Val e /s )5stem'!vent/rgs7 8andles t"tNomeProduto':e"tC9anged B!ste codigo usa uma consulta $%N& para obter una se*uencia B%!numerable de ob#etos Clientes com base no criterio informado Bna cai"a de te"to t"tNomeCliente *ue = concatenado Bcom o caractere 4L7 simulando a funcionalidade 4M7 do )&$ Bpara ser usada na e"presso $%H! da consulta $%N& (im criterio /s )tring Bconcatenamos o te"to informado no controle com o coringa 4L7 criterio < 2e't"tNomeProduto':e"t N OLO (im prod%tos ? "rom prod In 'd.Prod%tos < 3ere prod.Nome Li.e criterio < Se#ect prod.Prod%toI(= prod.Nome= prod.preco= prod.esto7%e < >rder B2 Nome Ascendin0 B/tribuimos como origem de dados ao (ata?ridVie,@ Bo resultado da consulta $%N& 2e'dgvProdutos'(ata)ource < produtos':o$ist !nd )ub

!"ecutando o pro#eto e abrindo o formulrio de busca de produtos se digitarmos os caracteres $o teremos o resultado da figura bai"o1

& de !

&%/%0/$0%& %$:$'

VB .NET - Prottipo para sistema de vendas em LINQ

http://www.macoratti.net/0 /0!/v"n#psv$.htm

!scol9endo uma lin9a e clicando no boto Se#ecionar iremos obter os dados do produto para usar no formulrio de vendas'

)riando o ,orm%#1rio para se#e8-o de )#ientes


6 formulrio para busca e seleo de clientes , ,rm)#ientes = idPntico ao formulrio acima e , como eu # mencionei , poderEamos ter usando a 9erana visual para criAlo' !nto de forma resumida a seguir temos o leiaute do formulrio ,rm)#ientes 1

6 cdigo do formulrio = dado abai"o1


Public Class frmClientes B%nstanciamos un ob#eto da clase Ccm)oft(ataConte"t (im bd /s Ne, Ccm)oft(ataConte"t B(eclaramos uma variavel codigo como publica Public codigo /s )tring Private )ub frmClientes3$oad4B5Val sender /s )5stem'6b#ect, B5Val e /s )5stem'!vent/rgs7 8andles 25Base'$oad B!ste codigo usa una consulta $%N& Bpara obter una se*uecia %!numerable de ob#etos Clientes (im c#ientes ? "rom c#i In 'd.)#ientes < Se#ect c#i.c#ienteI(= c#i.nome= c#i.emai# < >rder B2 nome Ascendin0 2e'(ata?ridVie,@'(ata)ource < clientes':o$ist !nd )ub Private )ub btnCancelar3Clic;4B5Val sender /s )5stem'6b#ect, B5Val e /s )5stem'!vent/rgs7 8andles btnCancelar'Clic; B)e define como C/NC!$ o resultado da #anela de dilogo

( de !

&%/%0/$0%& %$:$'

VB .NET - Prottipo para sistema de vendas em LINQ

http://www.macoratti.net/0 /0!/v"n#psv$.htm

2e'(ialogGesult < )5stem'+indo,s'-orms'(ialogGesult'Cancel Bfec9a o formulario 2e'Close47 !nd )ub Private )ub btn)elecionar3Clic;4B5Val sender /s )5stem'6b#ect, B5Val e /s )5stem'!vent/rgs7 8andles btn)elecionar'Clic; B6btemos o Endice do elemento selecionado no (ata?ridVie, (im ro, /s %nteger < 2e'(ata?ridVie,@'CurrentGo,'%nde" B6btem o elemento da coluna Cliente%( codigo < 2e'(ata?ridVie,@'%tem4OCliente%(O, ro,7'Value':o)tring B(efinimos como 6H o resultado da #anela de dilogo 2e'(ialogGesult < )5stem'+indo,s'-orms'(ialogGesult'6H Bfec9a o formulrio 2e'Close47 !nd )ub Private )ub :e"tBo"@3:e"tC9anged4B5Val sender /s )5stem'6b#ect, B5Val e /s )5stem'!vent/rgs7 8andles t"tNomeCliente':e"tC9anged B!ste codigo usa uma consulta $%N& para obter una se*uencia B%!numerable de ob#etos Clientes com base no criterio informado Bna cai"a de te"to t"tNomeCliente *ue = concatenado Bcom o caractere 4L7 simulando a funcionalidade 4M7 do )&$ Bpara ser usada na e"presso $%H! da consulta $%N& (im criterio /s )tring Bconcatenamos o te"to informado no controle com o coringa 4L7 criterio < 2e't"tNomeCliente':e"t N OLO (im c#ientes ? "rom c#i In 'd.)#ientes < 3ere c#i.nome Li.e criterio < Se#ect c#i.c#ienteI(= c#i.nome= c#i.emai# < >rder B2 nome Ascendin0 B/tribuimos como origem de dados ao (ata?ridVie,@ Bo resultado da consulta $%N& 2e'(ata?ridVie,@'(ata)ource < clientes':o$ist !nd )ub

!"ecutando o formulrio e digitando os caracteres $a na cai"a de te"to iremos obter1

!scol9endo uma lin9a e clicando no boto Se#ecionar iremos obter os dados do cliente para usar no formulrio de vendas' ! com isso acabamos de criar os formulrios de menu 4$en%'vb7 e busca e seleo de clientes 4,rm)#ientes'vb7 e pedidos 4,rmProd%tos'vb7' C temos tudo pronto para criar o formulrio de vendas 4,rmVendas'vb7 onde poderemos selecionar clientes e produtos, incluir um pedido de venda , calcular o total e dar bai"a no esto*ue dos itens vendidos' /guarde a continuao na Fltima parte do artigo 1 VB.NET 2008 - Prottipo para Sistema de Vendas com LINQ - III !u sei , = apenas VB 'N!: , mas eu gosto''' GeferPncias1

) de !

&%/%0/$0%& %$:$'

VB .NET - Prottipo para sistema de vendas em LINQ

http://www.macoratti.net/0 /0!/v"n#psv$.htm

9ttp1>>,,,'microsoft'com>brasil>msdn>:ecnologias>ar*uitetura>$%N&'msp" $%N& A 9ttp1>>msdn2'microsoft'com>enAus>netframe,or;>aaQ0IJQI'asp" @0@ $%N& )amples VB 200 A Criando uma aplicao completa com $%N& :o )&$ A %%% VB 200 A Criando uma aplicao completa com $%N& :o )&$ A %% VB 200 A Criando uma aplicao completa com $%N& :o )&$ A % $%N& :o )&$ A (escritor 6>G, (ataConte"t e )tored Procedures /)P 'N!: 200 A $%N& :o )&$ A opera0es bsicas

Cos= Carlos 2acoratti

! de !

&%/%0/$0%& %$:$'

VB .NET - Prottipo para sistema de vendas em LINQ

http://www.macoratti.net/0 /0!/v"n#psv$.htm

VB.NET 2008 - Prottipo para Sistema de Vendas com LINQ - III


Esta a ltima parte do prottipo para sistema de vendas com LINQ. Se voc esta chegando agora sugiro que leia os dois artigos anteriores: VB.NET !!" # $rottipo para sistema de Vendas com %&N' VB.NET !!" # $rottipo para sistema de Vendas com %&N' && Vou come(ar e)i*indo o +ormul,rio de vendas frmvendas do sistema:
-s controles usados no +ormul,rio s.o: /ados do 0liente: t)t0odigo0liente t)tNome0liente *tn$rocura0liente /ados do $roduto: t)tNome$roduto t)t$reco$roduto t)t'uantidade *tn$rocura$roduto E)i*i(.o das Vendas : dgvVendas tnInc!"ir# tnE$c!"ir# tn%ance!ar e tnSa!var E)i*i(.o do total: t)tTotal

1ntes de entrar no cdigo do +ormul,rio teremos que criar uma classe para poder tratar os detalhes do $edido 2Vendas34 0lique com o *ot.o direito so*re o nome do pro5eto e selecione a op(.o &dd ne' Item 4 Na 5anela Ne' Item selecione o template %!ass e in+orme o nome deta!(esPedidos.v 4 1 seguir inclua o seguinte cdigo nesta classe:
$u*lic 0lass )eta!(esPedidos $rivate 6cod$roduto 1s String $rivate 6nome$roduto 1s String $rivate 6quantidade 1s &nteger $rivate 6preco 1s /ou*le $rivate 6su*total 1s /ou*le $rivate 6estoque$roduto 1s /ou*le $u*lic $ropert7 Esto*"eProd"to23 1s &nteger 8et 9eturn 6estoque$roduto End 8et Set2B7Val value 1s &nteger3 6estoque$roduto : value End Set End $ropert7 $u*lic $ropert7 %odProd"to23 1s String 8et 9eturn 6cod$roduto End 8et Set2B7Val value 1s String3 6cod$roduto : value End Set End $ropert7

Na classe )eta!(esPedidos de+inimos ; propriedades : Estoque$roduto23 Nome$roduto23 'uantidade23 $reco23 Su*total23 que ser.o usadas para tratarmos os detalhes dos pedidos.

% de !

$%/%0/&0%$ %&:&'

VB .NET - Prottipo para sistema de vendas em LINQ

http://www.macoratti.net/0 /0!/v"n#psv$.htm

$u*lic $ropert7 NomeProd"to23 1s String 8et 9eturn 6nome$roduto End 8et Set2B7Val value 1s String3 6nome$roduto : value End Set End $ropert7 $u*lic $ropert7 Q"antidade23 1s &nteger 8et 9eturn 6quantidade End 8et Set2B7Val value 1s &nteger3 6quantidade : value End Set End $ropert7 $u*lic $ropert7 Preco23 1s /ou*le 8et 9eturn 6preco End 8et Set2B7Val value 1s /ou*le3 6preco : value End Set End $ropert7 $u*lic $ropert7 S" tota!23 1s /ou*le 8et 9eturn 6su*total End 8et Set2B7Val value 1s /ou*le3 6su*total : value End Set End $ropert7 End 0lass

Voltando ao +ormul,rio de vendas a primeira coisa que temos que +a<er declarar as vari,veis que usaremos na aplica(.o as quais s.o:
=/e+inir o o*5eto *d da classe >cmSo+t/ata0onte)t /im *d 1s Ne? >cmSo+t/ata0onte)t =/e+inir o*5eto da clase /etalhes$edidos /im o/etalhes$edidos 1s /etalhes$edidos /im nome$roduto 1s String /im cod$roduto 1s String /im preco$roduto 1s /ou*le /im codigo0liente 1s String /im estoque$roduto 1s &nteger =/e+inir una %&ST1 de -*5etos /etalhes$edidos /im 1rr/etalhes$edidos 1s Ne? %ist2-+ /etalhes$edidos3

$erce*a que eu declarei um uma lista do tipo )eta!(esPedidos usando 8enerics4 apenas para lem*rar:
List(Of T) - 9epresenta uma lista +ortemente tipada de o*5etos que podem ser acessados atravs de um @ndice. Aornece os mtodos Search, Sort e e+etua a manipula(.o da lista.

No evento %!ic+ do *ot.o com B pontinhos ao lado do cdigo do cliente temos o cdigo que ir, a*rir o +ormul,rio frm%!ientes para que o usu,rio selecione o um cliente 5, cadastrado4 em seguida usando o cdigo do cliente escolhido +eita uma cons"!ta LINQ para selecionar o %!iente que possui o cdigo escolhido no +ormul,rio frmc!ientes e e)i*ir os seus dados nos controles do +ormul,rio frmvendas4
$rivate Su* *tn$rocura0liente60licC2B7Val sender 1s S7stem.-*5ectD B7Val e 1s S7stem.Event1rgs3 Eandles *tn$rocura0liente.0licC =&nstanciamos un -*5eto Aormulario +rm0lientes /im dialogo 1s Ne? +rm0lientes =Fostramos o Aormulario dialogo.Sho?/ialog23 =Se o resultado do Aormulario e di+erente de -G =mostra uma mensagem que indica que n.o =h, nenhum cliente selecionado &+ dialogo./ialog9esult : Hindo?s.Aorms./ialog9esult.-G Then =Isamos uma consulta %&N' para selecionar um cliente =do qual recuperamos a vari,vel codigo0liente declarada no =Aormulario +rm0lientes )im c!iente , -rom c!i In d.%!ientes .

& de !

$%/%0/&0%$ %&:&'

VB .NET - Prottipo para sistema de vendas em LINQ

http://www.macoratti.net/0 /0!/v"n#psv$.htm

/(ere c!i.c!ienteI) , dia!o0o.codi0o . Se!ect c!i.c!ienteI)# c!i.nome# c!i.emai! =0arregamos os valores do resultado da consulta =%&N' nos te)t*o) do +ormulario Fe.t)t0odigo0liente.Te)t : cliente.To%ist.&tem2!3.cliente&/.ToString Fe.t)tNome0liente.Te)t : cliente.To%ist.&tem2!3.nome codigo0liente : cliente.To%ist.&tem2!3.cliente&/.ToString Else =e)i*e mensagem ao usu,rio e limpa os campos do +ormul,rio FsgBo)2JN.o +oi selecionado nenhum cliente.J3 Fe.t)t0odigo0liente.Te)t : JJ Fe.t)tNome0liente.Te)t : JJ codigo0liente : JJ End &+ End Su*

/a mesma +orma no evento %!ic+ do *ot.o temos o cdigo que a*ra o +ormul,rio para o usu,rio selecionar um produto 5, cadastrado e em seguida o*tendo o valor do cdigo do produto escolhido D seleciona o produto e e)i*e o seus dados no +ormul,rio frmvendas4
$rivate Su* *tn$rocura$roduto60licC2B7Val sender 1s S7stem.-*5ectD B7Val e 1s S7stem.Event1rgs3 Eandles *tn$rocura$roduto.0licC =&nstancia um +ormulario +rm$rodutos /im dialogo 1s Ne? +rm$rodutos =e)i*e o +ormulario dialogo.Sho?/ialog23 =se o resultado do +ormulario -C &+ dialogo./ialog9esult : Hindo?s.Aorms./ialog9esult.-G Then =cria uma consulta %&N' para e)i*ir os produtos cadastrados )im prod"to , -rom prod In d.Prod"tos . /(ere prod.Prod"toI) , dia!o0o.codi0o . Se!ect prod.Prod"toI)# prod.Nome# prod.preco# prod.esto*"e =o*tem os valores e e)i*e nos controles Te)tBo) do +ormulario Fe.t)tNome$roduto.Te)t : produto.To%ist.&tem2!3.Nome.ToString Fe.t)t$reco$roduto.Te)t : produto.To%ist.&tem2!3.preco.ToString =atri*ui os valores as vari,veis de+inidas no +ormulario nome$roduto : produto.To%ist.&tem2!3.Nome.ToString cod$roduto : produto.To%ist.&tem2!3.$roduto&/.ToString preco$roduto : 0onvert.To/ou*le2produto.To%ist.&tem2!3.preco.ToString3 estoque$roduto : 0onvert.To&ntB 2produto.To%ist.&tem2!3.estoque.ToString3 =poe o +oco no te)t*o) quantidade t)t'uantidade.Aocus23 Else =e)i*e mensagem ao usu,rio e limpa os campos do +ormul,rio FsgBo)2JNenhum $roduto +oi selecionado.J3 Fe.t)tNome$roduto.Te)t : JJ Fe.t)t$reco$roduto.Te)t : JJ nome$roduto : JJ cod$roduto : JJ preco$roduto : !.! End &+

- cdigo relacionado ao *ot.o &ncluir esta descrito a*ai)o e usa o arra7%ist do tipo )eta!(esPedidos para e)i*ir os pedidos de vendas inclu@dos no controle )ata1ridVie'4
$rivate Su* *tn&ncluir60licC2B7Val sender 1s S7stem.-*5ectD B7Val e 1s S7stem.Event1rgs3 Eandles *tn&ncluir.0licC =Veri+icamos a quantidade +oi in+ormada &+ t)t'uantidade.Te)t : String.Empt7 Then FsgBo)2J&n+orme a quantidade requerida...J3 t)t'uantidade.Aocus23 E)it Su* End &+ =Veri+icamos se o nome do produto D preco e quantidade n.o est.o va<ios &+ t)tNome$roduto.Te)t KL JJ 1nd t)t$reco$roduto.Te)t KL JJ 1nd t)t'uantidade.Te)t KL JJ Then =Veri+icamos se o estoque do produto n.o menor do que o solicitado &+ 0onvert.To&ntB 2estoque$roduto3 K 0onvert.To&ntB 2t)t'uantidade.Te)t3 Then =Fostramos uma aviso ao usu,rio FsgBo)2J1 quantidade requerida Superior a do estoqueJ3 =0omo a quantidade solicitada mario que o estoque =perguntamos se o usu,rio dese5a esta*elecer o estoque atual =com a nova quantidade in+ormada &+ FessageBo).Sho?2J/ese5a esta*elecer o estoque atual como a nova quantidade requeridaJD6 JVendasJD FessageBo)Buttons.MesNo3 : Hindo?s.Aorms./ialog9esult.Mes Then

$ de !

$%/%0/&0%$ %&:&'

VB .NET - Prottipo para sistema de vendas em LINQ

http://www.macoratti.net/0 /0!/v"n#psv$.htm

=Esta*lecemos a nova quantidade em estoque t)t'uantidade.Te)t : estoque$roduto =&niciali<amos o o*5eto da classe /etalhes$edidos o/etalhes$edidos : Ne? /etalhes$edidos =$reenchemos os valores =################################################################# o/etalhes$edidos.'uantidade : 0onvert.To&ntB 2t)t'uantidade.Te)t3 o/etalhes$edidos.0od$roduto : cod$roduto o/etalhes$edidos.Nome$roduto : nome$roduto o/etalhes$edidos.$reco : preco$roduto o/etalhes$edidos.Estoque$roduto : estoque$roduto o/etalhes$edidos.Su*total : preco$roduto N 0onvert.To&ntB 2t)t'uantidade.Te)t3 =######################################################################## =Veri+icamos se o produto esta na lista de pedidos =e incluimos a lista de /etalhes$edidos &+ *uscar/etalhesVendas21rr/etalhes$edidosD o/etalhes$edidos3 : Aalse Then =1gregamos o pedido a lista de /etalhes$edidos 1rr/etalhes$edidos.1dd2o/etalhes$edidos3 End &+ =1ssciamos a lista de /etalhes$edidos como +onte de dados ao datagridvie? Fe.dgvVendas./ataSource : 1rr/etalhes$edidos Else =Se n.o dese5a esta*elecer o estoque atual com a quantidade solicitada =voltamos ao +ormulario para escolher outro produto *tn$rocura$roduto60licC2NothingD Nothing3 End &+ Else =0omo a quantidade requerida e menor que o estoque =iniciamos o o*5eto da classe /etalhes$edidos o/etalhes$edidos : Ne? /etalhes$edidos =$reenchemos os valores no o*5eto o/etalhes$edidos.'uantidade : 0onvert.To&ntB 2t)t'uantidade.Te)t3 o/etalhes$edidos.0od$roduto : cod$roduto o/etalhes$edidos.Nome$roduto : nome$roduto o/etalhes$edidos.$reco : preco$roduto o/etalhes$edidos.Estoque$roduto : estoque$roduto o/etalhes$edidos.Su*total : preco$roduto N 0onvert.To&ntB 2t)t'uantidade.Te)t3 =Veri+icamos se o produto solicitado esta na lista de pedidos =Se n.o estiver incluimos na lista de /etalhes$edidos &+ *uscar/etalhesVendas21rr/etalhes$edidosD o/etalhes$edidos3 : Aalse Then =&ncluimos o pedido a lista de /etalhes$edidos 1rr/etalhes$edidos.1dd2o/etalhes$edidos3 End &+ =1ssociamos a lista como origem da +onte de dados Fe.dgvVendas./ataSource : 1rr/etalhes$edidos.To%ist End &+ End &+ =%impamos os te)tBo) Fe.limpar6produto23 =0alculamos o Total do $edido Fe.calcular6total23 End Su*

No *ot.o Sa!var temos o cdigo que ir, salvar os dados e atuali<ar o estoque de produtos4 Nesta rotina estou usando um e)press.o lam*da4 2 *"e s3o E$press4es Lam da 5 As expresses lambda foram includas no VS/VB 2008 para dar suporte a consultas LINQ. As cl usulas Where s!o assim compiladas como expresses lambdas e chamadas em itens aplic "eis do seu dataset. #odem ser consideradas uma forma de dele$ate %ue pode passar ou retornar outra fun&!o. $ara sa*er mais ve5a o meu artigo: 1S$ .NET # Isando %&N'
$rivate Su* *tnSalvar60licC2B7Val sender 1s S7stem.-*5ectD B7Val e 1s S7stem.Event1rgs3 Eandles *tnSalvar.0licC =Vamos usar o mapeamento +eito pelo %&N' =para e+etivar as atuali<a(Oes nas *ases de dados Tr7 =1 e)press.o lam*da a seguir devolve um o*5eto 0liente =Estamos usando o codigo do cliente para identi+icar unicamento o cliente /im 0li 1s 0liente : d.%!ientes.Sin0!e6-"nction6p7 p.c!ienteI) , 8e.t$t%odi0o%!iente.Te$t7 =################################################# =0ria um novo o*5eto $edido =################################################# /im o$edido 1s Ne? $edido o$edido.data : /ate.No? o$edido.cliente&/ : 0li.cliente&/

( de !

$%/%0/&0%$ %&:&'

VB .NET - Prottipo para sistema de vendas em LINQ

http://www.macoratti.net/0 /0!/v"n#psv$.htm

o$edido.0liente : 0li =################################################## =-*tendo os detalhes do pedido =reali<o a gera(.o dos o*5etos $edido =vou percorrer o arra7 dos detalhes do pedido =#################################################### Aor Each o 1s /etalhes$edidos &n 1rr/etalhes$edidos =&nstancio um o*5eto $roduto selecionando pelo codigo do produto /im produto 1s $roduto : d.Prod"tos.Sin0!e6-"nction6a7 a.Prod"toI) , o.%odProd"to.ToStrin0677 =0ria um novo detalhe do pedido /im det$edido 1s Ne? /etalhes$edido det$edido.$roduto : produto det$edido.$roduto&/ : produto.$roduto&/ det$edido.'uantidade : o.'uantidade det$edido.$reco : o.$reco =inclui os detalhes do pedido no pedido o$edido./etalhes$edidos.1dd2det$edido3 =#altera a quantidade de estoque do produto produto.estoque : produto.estoque # o.'uantidade Ne)t =###################################################### =1qui atuali<o a *ase de dados d.S" mit%(an0es67 FsgBo)2J/ados de $edidos D /etalhes de $edidos e Estoque atuali<ados com sucesso...J3 0atch e) 1s E)ception FsgBo)2e).Fessage3 Ainall7 =chama as rotinas para limpar clientes e produtos e vendas limpar6cliente23 limpar6produto23 limpar6venda23 Fe.calcular6total23 End Tr7 End Su*

1 +un(.o "scar)eta!(esVendas rece*e como parPmetro o arra7%ist do tipo )eta!(esPedidos e pesquisa no arra7%ist por um determinado produto con+erindo com a quantidade em estoque4
$u*lic Aunction "scar)eta!(esVendas2B7Val arra7 1s %ist2-+ /etalhes$edidos3D B7Val o*5/V 1s /etalhes$edidos3 1s Boolean =Vrei+icamos se um produto 5a +oi solicitado Aor Each o/et$ed 1s /etalhes$edidos &n arra7 &+ o/et$ed.0od$roduto : o*5/V.0od$roduto Then /im n'uantidade 1s &nteger =Se encontramos o produto na lista de pedidos =incrementamos a quantidade solicitada =com a quantidade solicitada anteriomente n'uantidade : o/et$ed.'uantidade Q o*5/V.'uantidade &+ n'uantidade K: o/et$ed.Estoque$roduto Then o/et$ed.'uantidade : n'uantidade o/et$ed.Su*total : o/et$ed.$reco N o/et$ed.'uantidade Else FsgBo)2J- estoque atual insu+iciente para a quantidade solicitada.J3 End &+ 9eturn True End &+ Ne)t 9eturn Aalse End Aunction

- total e)i*ido no +ormul,rio calculado pela rotina ca!c"!ar.tota! que percorre o arra7%ist e soma os valores dos produtos inclu@dos4
Su* ca!c"!ar.tota!23 /im soma 1s /ou*le =calcula o valor total dos pedidos =percorre o arra7%ist e soma o valor Su*total Aor Each i 1s /etalhes$edidos &n 1rr/etalhes$edidos soma Q: i.Su*total Ne)t Fe.t)tTotal.Te)t : soma.ToString2J0J3 End Su*

Ainalmente temos as rotinas para limpar os produtosD vendas e clientes4


S" !impar.prod"to67

) de !

$%/%0/&0%$ %&:&'

VB .NET - Prottipo para sistema de vendas em LINQ

http://www.macoratti.net/0 /0!/v"n#psv$.htm

=limpa os controles Te)tBo) Fe.t)t'uantidade.0lear23 Fe.t)tNome$roduto.0lear23 Fe.t)t$reco$roduto.0lear23 End Su* S" !impar.venda67 =%impa a lista usando o metodo 0lear 1rr/etalhes$edidos.0lear23 =1tri*uir a lista como origem de dados ao datagridvie? Fe.dgvVendas./ataSource : 1rr/etalhes$edidos.To%ist End Su* S" !impar.c!iente67 =Fetodo para limpar os te)tBo) 1ssociados ao 0liente Fe.t)t0odigo0liente.0lear23 Fe.t)tNome0liente.0lear23 End Su*

- cdigo esta comentado *asta pegar o pro5eto completo e con+erir o seu +uncionamento. 0om isso voc tem um prottipo *em simples de um sistema de vendas *,sico que pode lhe dar algumas idias para o seu prprio pro5eto. Eu sei D apenas VB .NET e %&N' D mas eu gosto... re+erncias:
http:RR???.microso+t.comR*rasilRmsdnRTecnologiasRarquiteturaR%&N'.msp) %&N' # http:RRmsdn .microso+t.comRen#usRnet+rame?orCRaaS!;TS;.asp) U!U %&N' Samples VB !!" # 0riando uma aplica(.o completa com %&N' To S'% # &&& VB !!" # 0riando uma aplica(.o completa com %&N' To S'% # && VB !!" # 0riando uma aplica(.o completa com %&N' To S'% # & %&N' To S'% # /escritor -R9D /ata0onte)t e Stored $rocedures 1S$ .NET !!" # %&N' To S'% # opera(Oes *,sicas %&N' # 0onceitos B,sicos e +undamentos &&& # E)pressOes lam*da %&N' # Isando 0om*oBo) com dados relacionados %&N' # 0onceitos B,sicos e +undamentos && # Ftodos de e)tens.o %&N' # 0onceitos B,sicos e +undamentos &# &n+erncia de tipos

>os 0arlos Facoratti

! de !

$%/%0/&0%$ %&:&'

Вам также может понравиться