Ir para conteúdo
Fórum Script Brasil
  • 0

Diiculdades com laços


Carlos Rocha

Pergunta

Ola!

olha a furada que eu entrei nela.

que troço dificil.

não estou conseguindo e novamente recorro aos colegas.

Estou terminando uma pequena aplicação windows para cadastar pedidos.

Bom, acontece, que para imprimir o pedido no PrinDoicumet com os seus ítens, atraves da ajuda de voces eu consegui.

O problema agora é que o cliente ta querendo o seguinte:

Um relatório que lista todos os pedidos de um período a ser escolhido pelo cliente numa datatimepicker.

O sql, tranquilo, já fiz.

Cada pedido do cliente nunca passa de 5 ítens de pedido, na maioria 2 por se tratar de poucos produtos que ele trabalha.

Fiz um código que le os pedidos com datareader (leitor) num wile. Dentro desse wilw puz outro wilw para pegar cada uma vez que esse wile recebe um numero de pedido e faço uma consulta usando um dataset para ver quais s~çao os ítens desse pedido e usando um foreach listo os ítens desse pedido.

Acontece que quando boto pra rodar o programa trava.

eis o código:

LinhasPorPagina = e.MarginBounds.Height / FonteNormal.GetHeight(e.Graphics) - 10

While (LinhaAtual < LinhasPorPagina AndAlso leitor.Read())

pedidoID = leitor("pedidoID")

clienteID = leitor("clienteID")

nomecli = leitor("nome")

PosicaoDaLinha = MargemSuperior + (LinhaAtual * FonteNormal.GetHeight(e.Graphics)) + 100

e.Graphics.DrawString(clienteID, FonteNormal, Brushes.Red, MargemEsquerda, PosicaoDaLinha, New StringFormat())

e.Graphics.DrawString(nomecli, FonteNormal, Brushes.Red, MargemEsquerda + 50, PosicaoDaLinha, New StringFormat())

While (leitor("pedidoID"))

Dim PrintStringdetalhespedidos2 As String = "Select * from detalhespedidos where pedidoID= " & leitor("pedidoID")

Dim item As DataSet = accDb.ExecuteDS(PrintStringdetalhespedidos2, "detalhespedidos")

For Each linhaDS As DataRow In item.Tables(0).Rows

produtoID = linhaDS("produtoID")

descricao = linhaDS("descricao")

quantidade = linhaDS("quantidade")

unidade = linhaDS("unidade")

preço = linhaDS("preço")

subtotal = linhaDS("subtotal")

'condicao = linha("condicao")

'total += subtotal

'condicao = linha("condicao")

e.Graphics.DrawString(produtoID, FonteNormal, Brushes.Red, MargemEsquerda + 200, PosicaoDaLinha, New StringFormat())

e.Graphics.DrawString(descricao, FonteNormal, Brushes.Red, MargemEsquerda + 250, PosicaoDaLinha, New StringFormat())

e.Graphics.DrawString(quantidade, FonteNormal, Brushes.Red, MargemEsquerda + 300, PosicaoDaLinha, New StringFormat())

e.Graphics.DrawString(preço, FonteNormal, Brushes.Red, MargemEsquerda + 350, PosicaoDaLinha, New StringFormat())

e.Graphics.DrawString(subtotal, FonteNormal, Brushes.Red, MargemEsquerda + 400, PosicaoDaLinha, New StringFormat())

'e.Graphics.DrawString(condicao, FonteNormal, Brushes.Red, MargemEsquerda + 450, PosicaoDaLinha, New StringFormat())

'e.Graphics.DrawString(total, FonteNormal, Brushes.Red, MargemEsquerda + 450, PosicaoDaLinha, New StringFormat())

Next linhaDS

End While

LinhaAtual += 1

End While

Por favor, aonde estou errando?

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

A ideia é resolver esse problema:

Cada linha dessas 2 correspondem a um pedido e se você observar bem, vera um garrancho à frente do primeiro pedido.

isso é porque o primeiro pedido, tem 2 ítens e um sobrepos o outros ao passo que o segundo pedido só tem 1 ítem.

Problema parece ser de laço!

Queria é fazer que meostra-se todos os ítens de cada pedido e só depois que tdos os ítens de um pedido forem listados ai sim mostrar o segundo pedido. Isso respeitando a paginação dos pedidos.

Veja:

aa.jpg

Link para o comentário
Compartilhar em outros sites

  • 0

Fiz um gabiarra, partindo do principio de que cada pedido não passa de 5 ítens e cada linha com 20 pixeus de altura, puz cada linha do wile com 20 pixeus e incremenei 20 pixeus a cada linha após a exibição dos dados do pedido, não dos tens.

Acontece, que se um determinado pedido tiver por exemplo 07 ítens, ai eu caio no mato pois na hora de exibir o último pdido dele, sera mostrado sobreposto os dados do proximo pedido.

Como resolvo isso?

veja a figura logo abaixo:

'LinhasPorPagina = e.MarginBounds.Height / FonteNormal.GetHeight(e.Graphics) - 10

LinhasPorPagina = 2

PosicaoDaLinha = MargemSuperior + (LinhaAtual * FonteNormal.GetHeight(e.Graphics)) + 100

While (LinhaAtual < LinhasPorPagina AndAlso leitor.Read())

pedidoID = leitor("pedidoID")

clienteID = leitor("clienteID")

nomecli = leitor("nome")


e.Graphics.DrawString(clienteID, FonteNormal, Brushes.Red, MargemEsquerda, PosicaoDaLinha, New StringFormat())

e.Graphics.DrawString(clienteID, FonteNormal, Brushes.Red, MargemEsquerda + 50, PosicaoDaLinha, New StringFormat())

e.Graphics.DrawString(nomecli, FonteNormal, Brushes.Red, MargemEsquerda + 100, PosicaoDaLinha, New StringFormat())

Dim PosicaoDaLinhaDS As Integer = PosicaoDaLinha

Dim PrintStringdetalhespedidos2 As String = "Select * from detalhespedidos where pedidoID= " & leitor("pedidoID")

Dim item As DataSet = accDb.ExecuteDS(PrintStringdetalhespedidos2, "detalhespedidos")

For Each linhaDS As DataRow In item.Tables(0).Rows

produtoID = linhaDS("produtoID")

descricao = linhaDS("descricao")

quantidade = linhaDS("quantidade")

unidade = linhaDS("unidade")

preço = linhaDS("preço")

subtotal = linhaDS("subtotal")

'condicao = linha("condicao")

'total += subtotal

'condicao = linha("condicao")

e.Graphics.DrawString(produtoID, FonteNormal, Brushes.Red, MargemEsquerda + 300, PosicaoDaLinhaDS, New StringFormat())

e.Graphics.DrawString(descricao, FonteNormal, Brushes.Red, MargemEsquerda + 350, PosicaoDaLinhaDS, New StringFormat())

e.Graphics.DrawString(quantidade, FonteNormal, Brushes.Red, MargemEsquerda + 500, PosicaoDaLinhaDS, New StringFormat())

e.Graphics.DrawString(preço, FonteNormal, Brushes.Red, MargemEsquerda + 550, PosicaoDaLinhaDS, New StringFormat())

e.Graphics.DrawString(subtotal, FonteNormal, Brushes.Red, MargemEsquerda + 600, PosicaoDaLinhaDS, New StringFormat())

'e.Graphics.DrawString(condicao, FonteNormal, Brushes.Red, MargemEsquerda + 450, PosicaoDaLinhaDS, New StringFormat())

'e.Graphics.DrawString(total, FonteNormal, Brushes.Red, MargemEsquerda + 450, PosicaoDaLinhaDS, New StringFormat())

PosicaoDaLinhaDS += 20

Next linhaDS

PosicaoDaLinha += 100

LinhaAtual += 1

End While

TotalPaginas = Ceiling(totalLinhas / LinhasPorPagina)

cc.jpg

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...