none
VB2010 + Report Viewer + 2 dataset ou mais RRS feed

  • Pergunta

  • Boa noite fórum!

    Eu estou aprendendo a utilizar a ferramenta de relatórios da microsoft, o report viewer e até o presente momento tenho conseguido explorá-la de forma satisfatória.

    Entretando, eu cheguei em um ponto em que não consigo mais resolver sozinho sem perguntar aqui, portanto, me perdoem se for uma dúvida muito iniciante.

    Eu já desenhei 2 dos meus relatórios principais e conseguir exibir parte dos dados nesses relatórios através de uma view que construi no banco de dados. Mas as outras informações não são exibidas nessa view, pois isso faria com que duplicasse a quantidade de linhas. Para isso eu construí uma segunda view que exibi esse segundo lote de dados de forma correta sem duplicação do primeiro lote. Mas, eu não consegui exibir isso no relatório, primeiro porque, sinceramente, não sei usar o dataset! Nunca programei com ele. Toda forma de conexão com banco de dados faço via código com funções que eu mesmo criei baseado em modelos que extraí aqui do forum e do site do macoratti. Segundo, porque eu não tenho certeza de como iria popular os campos certos. Deixa eu explicar melhor isso:

    Eu tenho uma tabela principal chamada OrdemServico e uma tabela secundario chamada OSHoras, esta ultima contém informações de horas e maquinário utilizado na ordem de serviço (existem outros relacionamentos, como idmaquina e id cliente que liga respectivamente com oshoras e OrdemServico, mas não irei entrar em detalhes, pois talves não sejam relevantes para a dúvida).

    Essa tabela oshoras possui os seguintes campos:

    Id, idos, idhoramaq,qtde,valor,data,usercriacao,dataalteracao,useralteracao

    Eu preciso exibir o campo QTDE na imagem abaixo nos campos que estão selecionados dentro de um quadrado vermelho.

    Então as informações da tabela OrdemServiço serão exibidos nos campos já conectados com o dataset que o report viewer cria quando vc insere ele no form (pelo menos eu aprendi assim, se tiver um jeito de popular isso sem um dataset, para mim que estou acostumado ao trabalho braçal no código, seria melhor), mas eu não faço a menor idéia de como listar o segundo lote de informações dentro do mesmo dataset, ou até mesmo adicionar um segundo dataset ao reportviewer. E para dar um passo maior que a perna, depois de resolver esse problema, eu ainda não sei como vou separar o joio do trigo! Pois cada campo alí dentro do quadrado vermelho é um idhoramaq... portanto eu teria que testar uma condição do tipo “se idhoramaq=’TM’” por exemplo, eu adicionaria o valor do campo qtde referente a linha da tabela que satisfaça essa condição.

    Eu vi que dentro do textbox da para colocar expressões, mas como eu não fiz ainda o meu segundo select funcionar dentro do report viewer, eu não tenho ainda como saber se vou ser capaz de resolver isso.

    Eu imagino que a minha dúvida seja básica, pois eu sei resolver esse problema via código, mas não consigo fazer o formulário aparecer quando tento via código(alias, eu nem acho o textbox para impressão..eu não devo estar inicializando o report direito quando faço via código).... o pasto nesse assunto é grande e a cor da grama tá bem diferente do que estou acostumado...logo logo passo fome!

    Qualquer ajuda será bem vinda! E desculpem pelo texto enorme! Eu quis colocar o máximo de informações para ajudar a encontrar uma resposta.

    Att.

    Giovani Rodrigues

    domingo, 24 de março de 2013 21:29

Respostas

Todas as Respostas

  • Possivelmente eu encontrei uma solução aqui: http://adsystemsblog.audits.com.br/2009/04/10/tutorial-c-relatorios-master-detail-com-reportviewer/

    Pois o que eu quero mostrar no meu relatório nada mais é do que um relatório master-detail, só que em um formato diferente do padrão que o report viewer criaria. Pelo menos já tenho um norte definido!

    att.

    Giovani

    terça-feira, 26 de março de 2013 13:21
  • Só para só não deixar o assunto no ar, eu consegui resolver meu problema. Mas não foi pelo caminho que eu pensei. Eu abandonei o negocio de subreports, pois ainda não amadureci os meus conhecimentos nessa ferramenta. Vi vários tutorias, mas não consegui reproduzir nenhum, sempre ficou faltando algum detalhe.

    Aí eu resolvi montar via banco. Fiz uma view enorme com left join encadeado que resolveu meu problema. E depois passei a estudar a fundo os dataset (ferramenta muito interessante que nunca tinha usado por falta de costume). E a solução para o meu problema encontrei nesse link:

    https://www.youtube.com/watch?v=E0YGBhqd6mA

    Onde eu aprendi a atualizar um dataset via código e depois implementei no meu código e ficou assim:

    Private Sub frmRelatorios_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim sSql As String = "select * from ClientexHoraMaq where id_tm =" & sOS
            Using con As OleDbConnection = GetConnection()
                Try
                    con.Open()
                    Dim da As OleDbDataAdapter = New OleDbDataAdapter(sSql, con)
                    da.Fill(Me.ProdBDDataSet, "ClientexHoraMaq")
                    con.Close()
                Catch ex As Exception
                    Stop
                End Try
            End Using
            Me.report1.RefreshReport()
            Me.report2.RefreshReport()
        End Sub

    Engraçado que quando eu comecei a estudar esse problema o negocio parecia sem solução...e agora a solução se deu em poucas linhas!

    Att.

    Giovani

    quinta-feira, 28 de março de 2013 17:45