• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

dikx

Obter valor do registo anterior

11 mensagens neste tópico

Bom dia,

para um projecto pessoal que estou a fazer para iniciar-me no VB.Net, decidi fazer uma simples aplicação para guardar uns dados e mostrar uns relatórios.

A minha dúvida é a seguinte, e passo  a explicar a estrutura do meu projecto:

  • Form1 -> Form Inicial, com 3 textboxs, o BindingNavigator, e 2 butões, para o Form2 e o VisualizarImprimir

Quando faço o load, o seguinte código é carregado, para preencher os valores.

Me.Tb_clientesTableAdapter.Fill(Me.DCDataSet.tb_clientes) .

Num butão tenho também o seguinte código,

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim visualForm As New VisualizarImprimir

        visualForm.cnome = Me.NomeTextBox.Text
        visualForm.clienteID = Me.ClienteIDTextBox.Text
        visualForm.cemail = Me.EmailTextBox.Text
        visualForm.cemail_antes = Me.EmailTextBox.Text

        visualForm.ShowDialog() ,

que me filtra, para o form VisualizarImprimir, o registo actual e o qual vai ser mostrado no relatório.

  • Form2 -> Semelhante ao Form1, a única diferença é a maneira como são apresentados os registos, através de um DataGridView
  • VisualizarImprimir

Neste Form, tenho um PrintDocument, um PrintPreview, e alguns butões para futuras actualizações, nomeadamente em termos de obter a lista das impressoras, bem como definir a qual usar.

Quanto ao código aqui está

Public Class VisualizarImprimir
    Public cnome As String
    Public clienteID As String
    Public cemail As String
    Public cemail_antes As String

    Private Sub VisualizarImprimir_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'TODO: This line of code loads data into the 'DCDataSet.tb_clientes' table. You can move, or remove it, as needed.
        Me.Tb_clientesTableAdapter.Fill(Me.DCDataSet.tb_clientes)
        Me.ComboBox1.Text = PrintDocument1.PrinterSettings.PrinterName

    End Sub

    Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
        e.Graphics.DrawString("Dados do Cliente", New Font("arial", 40, FontStyle.Regular), Brushes.Black, 160, 80)
        e.Graphics.DrawString("ClienteID : ", New Font("arial", 15, FontStyle.Regular), Brushes.Black, 20, 200)
        e.Graphics.DrawString(clienteID, New Font("arial", 15, FontStyle.Regular), Brushes.Black, 220, 200)
        e.Graphics.DrawString("Nome : ", New Font("arial", 15, FontStyle.Regular), Brushes.Black, 20, 230)
        e.Graphics.DrawString(cnome, New Font("arial", 15, FontStyle.Regular), Brushes.Black, 220, 230)
        e.Graphics.DrawString("Email : ", New Font("arial", 15, FontStyle.Regular), Brushes.Black, 20, 260)
        e.Graphics.DrawString([b]cemail - cemail_antes[/b], New Font("arial", 15, FontStyle.Regular), Brushes.Black, 220, 260)

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        PrintDocument1.Print()

    End Sub

    Private Sub NumericUpDown1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NumericUpDown1.ValueChanged

        Dim zoomno As Integer

        zoomno = Convert.ToInt32(NumericUpDown1.Value)
        PrintPreviewControl1.Size = New Size(zoomno * 10, zoomno * 10)
        PrintPreviewControl1.AutoZoom = True

    End Sub
End Class

Nota1: cemail, bem com cemail_antes são valores, ou seja o campo não é texto, mas sim possui lá valores em números.

A minha dúvida é, no relatório, na parte que se encontra a bold no código "cemail - cemail_antes", o que eu queria que fosse mostrado no relatório era a diferença entre o valor deste registo e do registo anterior, e é aí que predomina a minha dúvida, como obtenho o valor anterior a este registo.

Peço desculpa pelo extenso post, mas penso que esteja organizado, e fácil de comprender a minha dúvida.

Obrigado e Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

Algumas dúvidas em relação ao que estás a fazer:

- Estás a usar um form para mostrar os resultados porquê ? Porque não utilizas o crystalreport ou os report que estão disponíveis ?

- Tu imprimes linha a linha e queres o valor do último registo ? Porque não utilizas uma variável global (ou private neste caso) ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

estou a usar um form para mostrar os resultados, pois não tenho nenhuns reports, bem como não tenho os crystal report instalados, possuo a versão Visual Baisc 2008 Express Edition.

Qanto ao segundo tópico não entendi a questão, mas eu estou a "filtrar" por assim dizer o que vai mostrar no "report", vou postar o projecto inteiro para caso queiram ver.

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, é melhor mostrares s projecto.

A versão express não tem relatórios (*.rdlc) ... pensava que tinha ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

jpaulino, já conseguiste ver sff?

Cumprimentos

Ainda não porque não tenho instalado a parte CE (pockets). Vou instalar mais logo.

Já agora porque está a usar uma base de dados *.sdf e não *.mdf ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

Penso que a 1ªparte não tenha a ver com a aplicação que pretendo desenvolver, nomeadamente a parte da instalação do CE.

Quanto à base de dados, estou a utilizar o tipo *.sdf pois nesta opção -> Microsoft SQL Server Compact 3.5 (.NET Framework Data Provider for Microsoft SQL Server Compact 3.5), é o que ele coloca.

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

Penso que a 1ªparte não tenha a ver com a aplicação que pretendo desenvolver, nomeadamente a parte da instalação do CE.

Quanto à base de dados, estou a utilizar o tipo *.sdf pois nesta opção -> Microsoft SQL Server Compact 3.5 (.NET Framework Data Provider for Microsoft SQL Server Compact 3.5), é o que ele coloca.

Cumprimentos

Sim, mas são versões para aplicações como pockets, smartphone, etc, embora também trabalhe em windows.

É um requisito ? Porque não utilizas o SQL Server "normal" ?

PS: Eu ainda não consegui colocar a tua aplicação a funcionar com o compact CE, mas logo tento melhor!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá, sim eu sei o que é o CE e para que serve, no entanto,a minha aplicação é para correr em Windows "normal" ;).

Quanto à BD, não não é um requisito, e posso alterar, mas a minha dúvida continua.

Não tens o Visual Basic 2008 e/ou *Express Edition ? Não conseguiste correr a app ainda?

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora