none
Como enviar um valor ou texto de um Form para um documento de relatório ou Html sem usar Dataset???????

    Question

  • Olá.
    Estou fazendo um aplicativo Windows com um formulário, neste form existem informações de entrada em texto e números. E também possui informações de saída em texto e números em função dos cálculos matemáticos realizados.

    Eu estou usando Visual Basic no  VS 2005.

    Tudo funciona perfeitamente, porém desejo agregar um relatório com todos os dados tanto os dados de entrada, como os dados de saída (respostas dos cálculos) que possa ser impresso no papel.
    então:

    Como enviar um valor ou texto de um Form para um documento de relatório ou Html sem usar Dataset???????

    Existe uma outra opção para se realizar o que desejo??


    Thursday, March 19, 2009 6:54 PM

Answers

  • Domingos, bom dia!

    Não sei se você conseguiu solução já para seu problema, pois já faz tempinho que este tópico foi feito... mais se alguem precisar, solucionei o problema desse jeito:

    Crie um DataSet, mas não faça a conexão com o DataAdapter, clica com botão direito na tela do DataSet e inclua uma nova DataTable, inclua as colunas dos parametros que você precisar. Entre no seu relatório e inclua o DataSet lá, ajeito os campos etc... para popular tais campos entre na tela que você chama o relatório e faça como laercio fez no video 1 dele.

    DataTable tabela = new DataTable();

    //Código..

    ReportDataSource myReportDataSource = new ReportDataSource("Nome_do_DataSource_do_seu_reltorio", tabela);

    ReportViewer1.LocalReport.DataSources.Add(myReportDataSource);

    A diferença é que você não vai popular está tabela através de um metodo SELECT acessando o BD, popule ela manualmente.

    (ex: Cria uma tabela (DataTable), adicione colunas (DataColumn), insira a linha com os dados do seus textboxs (DataRow)).

    Quando a tabela estiver com os dados que você quiser, basta adiciona-los como mostrei a cima (passando essa tabela que você fez manualmente como parametro).

    []'s.

    Att.
    Thiago Piccoli da Silva

     

    Tuesday, June 30, 2009 2:46 PM
  • Olá Thiago, PatríciaOD e Olintho

    Depois de 1 ano finalmente retomei a elaboração do aplicativo e consegui finalizar esta parte (Relatório).

    A solução eu encontrei em um vídeo no Video Training - Windows Client.

    Embora eu ainda esteja usando o VS 2005 e o vídeo tenha sido feito no VS 2008, em apenas alguns minutos consegui resolver.

    O caminho que utilizei se assemelha á resposta fornecida pelo Thiago Piccoli, porém não usei parâmetros.

    Para entender como a solução torna-se fácil é só assistir o vídeo do link abaixo.

    De toda forma agradeço á todos pela colaboração. Quem sabe se um dia conhecer bem o VS possa também auxiliar outros.

    Um grande abraço, Domingos

    http://windowsclient.net/learn/video.aspx?v=142074

    Saturday, August 07, 2010 2:52 AM

All replies

  •  Olá Domingos

    Bom não sei se entendi o que vc quer. Mas vou te dar um exemplo:

    Tenho um relatorio com um cabeçalho (Arquivo report) . Esse cabeçalho eu fiz com alguns TextBox e o conteúdo de alguns deles depende do que o usuário escolheu  na interface. Esses valores, por exemplo o período que o usuário escolheu, eu envio como parâmetro para o Report.

    Era isso que vc queria?
    Se for, o Laercio mostra como fazer isso no Video 2 (mostra um exemplo com imagem)

    Mais informações em:
    http://social.msdn.microsoft.com/Forums/pt-BR/vsreportingpt/thread/a96182b5-3781-4dbb-9733-65af62d1efec

    Espero ter ajudado
    Até mais

     


    Patricia
    Tuesday, March 24, 2009 5:57 PM
  • Olá Patricia

    Muito agradecido por sua atenção mas, infelizmente não encontrei nos vídeos a solução para o meu problema embora, os videos do Laércio sejam muito bons.

    Vou tentar explicar melhor o que desejo fazer para quem sabe obter uma dica adequada ao meu problema, ok.

    Primeiro vou fazer um comentário que acho pertinente ao assunto.

    Na internet existem vários vídeos e apostilas que ensinam a criar relatórios mas, a grande maioria senão todos usam o famoso Northwind, falam de Produtos, preços, pessoas, idade, endereços, etc. Entretanto, eu particularmente não uso nenhuma desta informações.

    Os aplicativos que faço são sempre através de Forms ou VBA para cálculos de engenharia que não utiliza este tipo de informações como as que citei.

    Por exemplo: tenho um campo Potência e um campo Rotação, o usurário do aplicativo preenche os campos e ao clicar o botão Calcular o aplicativo realiza os cálculos dividindo a potência pela rotação e me fornece como resultado o Torque em outro campo.

    A minha intenção é ter estas informações de entrada do usuário bem como as saída do aplicativo (resultados) em um relatório para que seja possível visualizar e seja possível a impressão em papel.

    Espero que esta explicação possa ajudar a esclarecer a minha necessidade pois, estou precisando bastante de uma solução para o meu problema.

    Os programas (aplicativos) que faço atualmente são feitos sem finalidade lucrativa, apenas para fins didáticos.

    Agradeço desde já toda ajuda possível.
    Domingos




    Wednesday, March 25, 2009 4:26 AM
  • Fala Domingos...

    Cara, a solução da Patricia funciona.

    Exemplo:
    No seu report, vc criará um parametro para cada "valor" que virá do form. Daí, qdo vc antes de vc chamar o report, atribua os valores em cada parametro e dentro do report vc "arruma" do jeito que quer. Costumo usar o controle report viewer para mostrar os resports. Se vc quiser saber exatamente como atribuir cada valor no report, vou colocar um exemplo. Ai vc altera para o seu propósito.

       
    Microsoft.Reporting.WebForms.ReportParameter[] reportParams = new Microsoft.Reporting.WebForms.ReportParameter[1];<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reportParams[0] = new Microsoft.Reporting.WebForms.ReportParameter("nomeDoParametroNoReport""valorDoReport"); 



    Espero ter ajudado.
    Thursday, March 26, 2009 3:32 PM
  • Leandro, agradeço por sua atenção a minha questão.

    Desculpe estar perguntando coisas que certamente são básicas, é que nunca fiz um curso específico, o pouco que aprendi foi através de tentativa e erro ou através de apostilas e vídeos que baixei.

    No vídeo 2  do Laércio ele utiliza informações de um banco de dados, então supondo que seja imprescindível fiz o seguinte:

    Iniciei a criação do ReportViewer seguindo os passos do Laércio no Vídeo 1 e:

    1° Criei o Dataset depois, quando fui criar o TableAdapter já enfrentei um problema. No vídeo 1 o Laércio já tem um Servidor (msdn\sqlexpress.AdvebtureWorks.dbo) e apenas cria uma nova conexão com o banco de dados (Microsoft SQL Server) e diz que está selecionando o banco de dados AdventureWorks.

    Acontece que não tenho um banco de dados e portanto estou sem saber o que fazer, rsrsrsrs.

    O que preciso fazer?

    Thursday, March 26, 2009 5:36 PM
  • Deixa eu ver se entendi.

    Voce quer fazer a conexão entre o Report e a aplicação? Se for isso...

    Bom, provavelmente vc temum banco instalado, msm se usar qqr versão do VS, 2005, 2008 ou express.

    Aí vc precisaria primeiro criar o banco pra depois linkar com os TableAdapters.

    No VS, abrir o solution explorer e clicar com o botão direito na solução, depois em Add New Item. Clica SqlServer Database.



    Se não for essa a sua dúvida, desculpa, tenta ser um pouco mais claro =)

    Abraço!
    Thursday, March 26, 2009 6:06 PM
  • Oi Domingos

    Os exemplos do Laercio realmente utilizam banco de dados mas vc não precisa utilizar se não for o seu caso. Faz pouco tempo que trabalho com .net então vou colocar os passos que eu seguiria para resolver o seu problema porém se alguém tiver outra solução, por favor post pessoal. Obrigada. Vamos lá então:

    1.º) Crie seu formulário e insira seus labels e seus textbox. Além disso inclua o botão que realiza os calculos como vc disse. Nesse exemplo crieI o label1 e um textbox1 (onde o usuário vai digitar algum dado)
    2.º) Nesse formulario inclua o componente ReportViewer (Siga as orientações do video do laercio para configurar o tamanho dele)
    3.º) Crie um Report (arquivo .rdlc). Nesse arquivo insira os TextBox necessários para criar o Layout que vc quer que seja impresso. Nesse exemplo vou considerar que coloquei 2 TextBox: 

        Objeto        Nome
        TextBox1    txtTitulo
        TextBox2    txtValor

    4.º) Ainda no report clique no menu Report e escolha a opção "Report Parameters". Adicione um parâmetro, nesse exemplo o nome é "ParametroTeste" (O Laercio mostra isso no video 2 mas o exemplo é com uma imagem). Depois clique em ok.
          Clique agora com o botão direito em cima do objeto "txtValor" e escolha a opção "Expression. Em category escolha "Parameters" e de um duplo click no parametro que vc criou anteriormente (que deve estar aparecendo do lado direito da janela (eu criei com o nome "ParametroTeste" . Depois click em ok.

    Aqui o seu Layout esta ok. Agora vamos voltar para o programa.

    5.º) Clique no botão, onde vc fez os calculos e agora vamos definir o report. Inclua os codigos: 

    //Define o report - Entre aspas vc coloca o caminho de acordo com a sua aplicação, no meu exemplo é "~\\Relatorios\\Teste3\\rptSemBD.rdlc"
    ReportViewer1.LocalReport.ReportPath = Server.MapPath("~\\Relatorios\\Teste3\\rptSemBD.rdlc");

    //Envia o parametro teste
    ReportParameter Param = new ReportParameter("ParametroTeste", TextBox1.Text);
    ReportViewer1.LocalReport.SetParameters(
    new ReportParameter[] { Param });


    Agora é só rodar a aplicação


    Espero ter ajudado.
    T+




    Patricia
    • Edited by PatriciaOD Thursday, March 26, 2009 6:20 PM Não coloquei o nome do parametro q criei
    • Proposed as answer by PatriciaOD Monday, March 30, 2009 5:29 PM
    Thursday, March 26, 2009 6:15 PM
  • Obrigado por sua atenção Leandro,

    Eu não tenho um banco de dados.

    Na aplicação que tenho eu não necessito de banco para rodá-lo.

    A Patrícia que também está me auxiliando na solução deste problema me parece ter entendido qual é minha necessidade.

    Como disse anteriormente a aplicação que estou fazendo não necessita de banco de dados pois todos os cálculos são feitos internamente no formulário, tanto as informações de entrada fornecidos pelo usuário quanto os resultados obtidos.

    Realmente não sei se é possível realizar o que desejo sem um banco de dados mas, acredito que como são apenas cálculos matemáticos não seja necessário de um banco de dados. E eu consiga transferir as informações diretamente do formulário para o relatório.

    A solução proposta pela Patrícia me parece estar no caminho de uma solução. Porém acho que a solução que esta em C# e eu estou usando VBasic.

    Estou tentando ajustar o código mas esta ocorrendo um erro quando clico no botão que chama o relatório e vou explicar mais detalhadamente na resposta a ela.

    Mas estou agradecido por sua atenção e espero contar com seu auxílio na solução deste problema.

    Um abraço
    Domingos
    Sunday, March 29, 2009 4:40 PM
  • Olá Patricia,

    Me parece que o caminho é este mesmo.

    A sua proposta me parece estar no caminho de uma solução. Porém acho que a sua solução que esta em C# e eu estou usando VBasic no VS 2005.

    Estou tentando ajustar o código mas esta ocorrendo um erro quando clico no botão que chama o relatório e vou explicar mais detalhadamente.

    O código em VB está assim:

            'Declaração de variáveis do Report (Relatório)
            Dim Server As Microsoft.Reporting.WinForms.LocalReport
            Server = New Microsoft.Reporting.WinForms.LocalReport

            '//Define o report - Entre aspas vc coloca o caminho de acordo com a sua aplicação
            ReportViewer1.LocalReport.ReportPath = Server.ReportPath("~\ReportViewer\Report1.rdlc")

            'Define o ReportParameter
            Dim ReportParameter As Microsoft.Reporting.WinForms.ReportParameter

            '//Envia o parametro teste
            ReportParameter = New Microsoft.Reporting.WinForms.ReportParameter("Potcv", Potencia.Text)
            ReportViewer1.LocalReport.SetParameters(ReportParameter)

    A linha que define o Report apresenta um erro diz que a conversão da sequência de caracteres '~\ReportViewer\Report1.rdlc' no tipo 'integer' não é válida.

    ~\ReportViewer\Report1.rdlc este é o endereço do Report e na pasta da aplicação.

    Potcv é o parâmetro criado no report e Potencia.text é a caixa de texto que contém a informação lá no form .

    Patrícia, você saberia dizer o que há de errado no meu código???

    Desde já agradeço
    Domingos
    • Proposed as answer by PatriciaOD Monday, March 30, 2009 5:28 PM
    Sunday, March 29, 2009 5:32 PM
  • Olá Domingos

    Primeiro tente essas duas situações:

    1) Altere como vc colocou o endereço do Report, por exemplo no meu caso coloquei:

    ReportViewer1.LocalReport.ReportPath = Server.MapPath("~\\Relatorios\\Teste3\\rptSemBD.rdlc");

    Repare que utilizo duas barras após o "~". No inicio tentei também como vc, ou seja, com uma barra somente mas dava erros (não me lembro quais agora).

    Não sei se em VB dá alguma diferença.

    2) No arquivo report, o seu parâmetro é do tipo string ? Pois pelo que entendi vc esta mandando um string  no "Potencia.Text" (Mesmo sendo um numero ele é enviado como string)

    Se  não der certo, post exatamente oq diz o erro e verifique se continua ocorrendo na mesma linha.    

    T+
    Patricia


    Patricia
    Monday, March 30, 2009 5:35 PM
  • Olá Patrícia.

    Eu verifiquei e em VB é com uma barra apenas mesmo. Mas, fiz a retirada dos parenteses e passou.

    O parâmetro está como string certinho tb.

    O código ficou assim:

           'Declaração de variáveis do Report (Relatório)
               Dim Server As Microsoft.Reporting.WinForms.LocalReport
               Server = New Microsoft.Reporting.WinForms.LocalReport

            '//Define o report - Entre aspas vc coloca o caminho de acordo com a sua aplicação
               ReportViewer1.LocalReport.ReportPath = "~\Relatorios\Report1.rdlc"

            'Define o ReportParameter
               Dim Param As Microsoft.Reporting.WinForms.ReportParameter

            '//Envia o parametro teste
               Param = New Microsoft.Reporting.WinForms.ReportParameter("Potcv", Potencia.Text)
               ReportViewer1.LocalReport.SetParameters(Param)

    Consegui rodar até a última linha quando então deu este erro mostrado na figura do link  abaixo.

    http://www.4shared.com/file/95931219/a7dda70f/Erro.html

    Onde diz o seguinte:

    Não é possível converter um objeto do tipo 'Microsoft.Reporting.WinForms.ReportParameter' no tipo 'System.Collections.Generic.IEnumerable`1[Microsoft.Reporting.WinForms.ReportParameter]'.

    Agradeço sua atenção

    Tuesday, March 31, 2009 6:13 AM

  •         'Define o ReportParameter
               Dim Param As Microsoft.Reporting.WinForms.ReportParameter

            '//Envia o parametro teste
               Param = New Microsoft.Reporting.WinForms.ReportParameter("Potcv", Potencia.Text)



    Domingos,

    Quando você criar os parametros do relatório, crie-os como um array.

    Não consegue acertar de acordo com sua sintaxe, mas comente apenas as linhas citadas acima e insira este codigo:

    Dim 

    Espero ter ajudado.

    [ ]'s

    Olintho S. de Jesus

    Param As ReportParameter() = {New Microsoft.Reporting.WinForms.ReportParameter("Potcv", Potencia.Text)}


    Entao se você precisar passar mais de um parametro ficará assim:

    Dim
    Param As ReportParameter() = {New Microsoft.Reporting.WinForms.ReportParameter("Potcv", Potencia.Text), New Microsoft.Reporting.WinForms.ReportParameter("Rotacao", Rotacao.Text), New Microsoft.Reporting.WinForms.ReportParameter("Parametro3", Valor3)}

     

     

     

    Wednesday, April 01, 2009 7:37 PM
  • Olá Domingos

    E ai? Deu certo a resposta do colega Olintho?

    T+

    Patricia


    Patricia
    Wednesday, April 08, 2009 4:43 PM
  • Olá PatriciaOD e Olintho

    Os exemplos dados foram úteis sim.

    Entretanto algo está faltando para que rode corretamente.

    Estou estudando o problema para encontrar uma solução.

    Assim que encontrar ou se não encontrar a solução para a falha escreverei novamente.

    Desde já obrigado
    Domingos
    Monday, April 13, 2009 2:43 PM
  • Domingos, bom dia!

    Não sei se você conseguiu solução já para seu problema, pois já faz tempinho que este tópico foi feito... mais se alguem precisar, solucionei o problema desse jeito:

    Crie um DataSet, mas não faça a conexão com o DataAdapter, clica com botão direito na tela do DataSet e inclua uma nova DataTable, inclua as colunas dos parametros que você precisar. Entre no seu relatório e inclua o DataSet lá, ajeito os campos etc... para popular tais campos entre na tela que você chama o relatório e faça como laercio fez no video 1 dele.

    DataTable tabela = new DataTable();

    //Código..

    ReportDataSource myReportDataSource = new ReportDataSource("Nome_do_DataSource_do_seu_reltorio", tabela);

    ReportViewer1.LocalReport.DataSources.Add(myReportDataSource);

    A diferença é que você não vai popular está tabela através de um metodo SELECT acessando o BD, popule ela manualmente.

    (ex: Cria uma tabela (DataTable), adicione colunas (DataColumn), insira a linha com os dados do seus textboxs (DataRow)).

    Quando a tabela estiver com os dados que você quiser, basta adiciona-los como mostrei a cima (passando essa tabela que você fez manualmente como parametro).

    []'s.

    Att.
    Thiago Piccoli da Silva

     

    Tuesday, June 30, 2009 2:46 PM
  • Olá Thiago, PatríciaOD e Olintho

    Depois de 1 ano finalmente retomei a elaboração do aplicativo e consegui finalizar esta parte (Relatório).

    A solução eu encontrei em um vídeo no Video Training - Windows Client.

    Embora eu ainda esteja usando o VS 2005 e o vídeo tenha sido feito no VS 2008, em apenas alguns minutos consegui resolver.

    O caminho que utilizei se assemelha á resposta fornecida pelo Thiago Piccoli, porém não usei parâmetros.

    Para entender como a solução torna-se fácil é só assistir o vídeo do link abaixo.

    De toda forma agradeço á todos pela colaboração. Quem sabe se um dia conhecer bem o VS possa também auxiliar outros.

    Um grande abraço, Domingos

    http://windowsclient.net/learn/video.aspx?v=142074

    Saturday, August 07, 2010 2:52 AM