AJUDA! VB 2010 ORIENTACAO A OBJETOS

TIDY 27/12/2011 10:16:21
#391984
Bom Dia a todos!

Estou com um pequeno problema e não consigo resolver! estou quase perto de conseguir mas nao consigo enxergar a solução!

Criei um projeto de vendas com banco de dados SQL, e um formulario onde eu seleciono um cliente, e vou adicionando os produtos a uma GridView onde depois que clico em salvar ele salva em uma tabela do banco de dados e me traz um relatorio com os dados do cliente e os produtos selecionados para imprimir! porem
cada vez que seleciono um produto e clico em adicionar ele adiciona os dados do cliente novamente! e na hora de gerar o relatorio fica somente os dados do cliente multiplicados um abaixo do outro!
Private Sub btnsalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnsalvar.Click
[ô]Vamos usar o mapeamento feito pelo LINQ
[ô]para efetivar as atualizações nas bases de dados
Try
[ô]A expressão lambda a seguir devolve um objeto Cliente
[ô]Estamos usando o codigo do cliente para identificar unicamento o cliente
Dim Cli As Cliente = BD.Clientes.Single(Function(p) p.ClienteID = Me.txtCodigoCliente.Text)
[ô]-------------------------------------------------
[ô]Cria um novo objeto Pedido
[ô]-------------------------------------------------
Dim oPedido As New Pedido
oPedido.data = Date.Now
oPedido.ClienteID = Cli.ClienteID
oPedido.Cliente = Cli
[ô]--------------------------------------------------
[ô]Obtendo os detalhes do pedido
[ô]realizo a geração dos objetos Pedido
[ô]vou percorrer o array dos detalhes do pedido
[ô]----------------------------------------------------
For Each o As detalhesPedidos In ArrDetalhesPedidos
[ô]Instancio um objeto Produto selecionando pelo codigo do produto
Dim produto As Produto = BD.Produtos.Single(Function(a) a.Codigo_prod = o.Código.ToString())

[ô]Cria um novo detalhe do pedido
Dim detPedido As New DetalhesPedido

[ô]detPedido.razao = txtNomeCliente.Text
[ô]detPedido.endereco = EnderecoTextBox.Text
[ô]detPedido.fone = TelTextBox.Text
[ô]detPedido.cnpj = CnpjTextBox.Text
[ô]detPedido.email = EmailTextBox.Text
[ô]detPedido.data = txtdata.Text
[ô]detPedido.bairro = BairroTextBox.Text
[ô]detPedido.cep = CepTextBox.Text
[ô]detPedido.inscr = Inscricao_estadualTextBox.Text
[ô]detPedido.contato = ContatoTextBox.Text
detPedido.Produto = produto
detPedido.quantidade = o.Quantidade
detPedido.preco = o.Preço
detPedido.pgto = o.Pgto
detPedido.prazoentrega = o.DataEntrega
detPedido.total = o.Subtotal
[ô]inclui os detalhes do pedido no pedido
oPedido.DetalhesPedidos.Add(detPedido)

[ô]-altera a quantidade de estoque do produto
[ô]produto.estoque = produto.estoque - o.Quantidade

Next


[ô]------------------------------------------------------
[ô]Aqui atualizo a base de dados
BD.SubmitChanges()
MsgBox([Ô]Dados de Pedidos , Detalhes de Pedidos e Estoque atualizados com sucesso...[Ô])

o erro esta ocorrendo no tratamento next que me traz denovo todas as imformaçoes e esta multiplicando os dados dos clientes!

Por Favor ajudem
Obrigado
TIDY 27/12/2011 14:30:14
#391993
Me ajudem por favor!
FOXMAN 27/12/2011 15:18:23
#392002
Tidy, vejo em seu sistema um erro de estrutura no banco de dados.

Analise comigo :

Se vc já tem uma tabela com os dados do cliente(que no seu caso é o objeto cliente) porque ter novamente os dados do cliente no objeto detalhe do pedido.

O coerente seria vc ter o seguinte :

TABELA CLIENTE
IDCLIENTE
NOMECLIENTE
ENDEREÇOCLIENTE
ETC...
ETC...
ETC...

TABELA PEDIDO
IDPEDIDO
IDCLIENTE
DATAPEDIDO
PRAZOPAGAMENTO
VALORPEDIDO
DESCONTO
ETC
ETC..
ETC..

TABELA DETALHES DE PEDIDO
IDDETALHE
IDPEDIDO
IDPRODUTO
DESCRICAOPRODUTO(este campo pode ser opcional)
QTDE
VLRUNITARIO
VLRTOTAL
ETC..
ETC..
ETC..
ETC...

Este é um exemplo de uma estrutura básica de dados. Observe que na tabela detalhe pedido não tem nenhuma referencia ao cliente e sim ao pedido.

A Organização seria :

o CLIENTE tem um PEDIDO
o PEDIDO tem PRODUTOS
E assim por diante.

TIDY 27/12/2011 15:54:12
#392004
sim, esta asim o projeto! mas eu estou querendo
criar um relatorio de vendas com as informações do cliente e dos pedidos
desta forma!

tem googletalk? me envie seu email se possivel para tratarmos o assunto

tidysofts@gmail.com

tiago_renato_machado@hotmail.com
Tópico encerrado , respostas não são mais permitidas