none
Crystal Report com ASP.NET C# RRS feed

  • Pergunta

  • Boa tarde a todos/as.

    Eu tenho um formulário que exibe num grid view os usuarios cadastrados.
    Crieu um arquivo do crystal report .rpt para exibir os usuarios cadastrados.
    no formulário de usuarios, acrescentei um crystalreportsource apontando para o arquivo .rpt
    depois adicionei um crystalreportviewer neste mesmo formulario apontando para o crystalreportsource.

    quando visualizo no browser, aparece o formulário normalmente com a gridview, mas o reportviewer está em branco e tem uma mensagem acima dele: Load report fail.

    Eu já vi varios sites tentando ensinar a fazer isso, mas a maioria está em VB, e eu uso C#, todos utilizam dataset, eu criei o crystal report direto pelo banco de dados no servidor local.

    Eu não sei como implementar a visualização do relatório...

    Por favor, me ajudem.
    quinta-feira, 24 de setembro de 2009 18:38

Respostas

  • Puxa vida... voces nem vao acreditar...

    O crystaldatasource estava apontando para o arquivo .rpt, até aí ok, o problema é que o caminho estava errado.

    Quando eu selecionava o relatorio da lista de relatorios, dava errado, mas se eu clicava em browse, aparecia o caminho completo.

    Agora deu certo.
    • Marcado como Resposta joaoluizbt quinta-feira, 1 de outubro de 2009 17:43
    quinta-feira, 1 de outubro de 2009 17:43

Todas as Respostas

  • Boa tarde a todos/as.

    Eu tenho um formulário que exibe num grid view os usuarios cadastrados.
    Crieu um arquivo do crystal report .rpt para exibir os usuarios cadastrados.
    no formulário de usuarios, acrescentei um crystalreportsource apontando para o arquivo .rpt
    depois adicionei um crystalreportviewer neste mesmo formulario apontando para o crystalreportsource.

    quando visualizo no browser, aparece o formulário normalmente com a gridview, mas o reportviewer está em branco e tem uma mensagem acima dele: Load report fail.

    Eu já vi varios sites tentando ensinar a fazer isso, mas a maioria está em VB, e eu uso C#, todos utilizam dataset, eu criei o crystal report direto pelo banco de dados no servidor local.

    Eu não sei como implementar a visualização do relatório...

    Por favor, me ajudem.
    Segue uma classe pra gerar em pdf ou excel os relatorios. (Alterar o caminho do banco, senha, etc) 
    Esse codigo serve para rpt q tenha sido feito com procedure


    using System.IO;
    using System.Web;
    using CrystalDecisions.CrystalReports.Engine;
    using CrystalDecisions.Shared;
    using CrystalDecisions.Web;
    using System.Collections;
    using System;

    namespace STFSICRYSTAL
    {
        public class Crystal
        {
            private string DBServer, DataBase, DBLogin, DBPwd;

            public Crystal()
            {
       // mudar aqui
                this.DBServer = server;
                this.DataBase = database;
                this.DBLogin = login;
                this.DBPwd  = senha;
                DCRCTexto.Dispose();
            }

            /// <summary>
            /// METODO USADO PARA CARREGAR RELATORIOS DO CRYSTAL
            /// </summary>
            /// <param name="nome_parametros"></param>
            /// <param name="valor_parametros"></param>
            /// <param name="p_path"></param>
            /// <param name="p_ObjCrystalView"></param>
            /// <param name="ObjReport"></param>
            /// <param name="p_resp"></param>
            /// <param name="Tipo_rel"></param>
            /// <returns>BOOL</returns>
            public bool CarregarRelatorio(ArrayList nome_parametros, ArrayList valor_parametros, string p_path, CrystalReportViewer p_ObjCrystalView, ReportDocument ObjReport, HttpResponse p_resp, string Tipo_rel)
            {
                try
                {                
                    p_ObjCrystalView.HasPageNavigationButtons = false;
                    p_ObjCrystalView.DisplayGroupTree = false;
                    p_ObjCrystalView.ReuseParameterValuesOnRefresh = true;
                    p_ObjCrystalView.ReportSource = ObjReport;
                    p_ObjCrystalView.Visible = true;
                    ObjReport.Load(p_path);                                                
                    ObjReport.SetDatabaseLogon(DBLogin, DBPwd, DBServer, DataBase, true);                                                     
                    
                    int cont = 0;
                    
                    for (cont = 0; cont < valor_parametros.Count; cont++)
                    {
                        if ((nome_parametros[cont].ToString() != "") && (nome_parametros[cont] != null))
                        {
                            if (valor_parametros[cont].GetType().ToString() == "System.String")
                            {
                                ObjReport.SetParameterValue(nome_parametros[cont].ToString(), valor_parametros[cont].ToString());
                            }
                            if ((valor_parametros[cont].GetType().ToString() == "System.Int32" || valor_parametros[cont].GetType().ToString() == "System.Int"))
                            {
                                ObjReport.SetParameterValue(nome_parametros[cont].ToString(), (int)(valor_parametros[cont]));
                            }
                        }
                        
                    }
                    p_ObjCrystalView.ReportSource = ObjReport;
                                    
                    switch (Tipo_rel.ToUpper())
                    {                     

                        case "EXCEL":                        
                            ObjReport.ExportToHttpResponse(ExportFormatType.ExcelRecord, p_resp, false, "");                        
                            break;
                        case "PDF":                        
                            ObjReport.ExportToHttpResponse(ExportFormatType.PortableDocFormat, p_resp, false, "");                        
                            break;
                        case "WORD":                        
                            ObjReport.ExportToHttpResponse(ExportFormatType.WordForWindows, p_resp, false, "");                        
                            break;
                    }

                    return true;
                }
                catch (Exception ex)
                {                
                    //throw new Exception(ex.Message);
                    return false;
                }            
            }

            /// <summary>
            /// METODO USADO PARA CARREGAR SUB-RELATORIOS CRYSTAL
            /// </summary>
            /// <param name="nome_parametros"></param>
            /// <param name="valor_parametros"></param>
            /// <param name="p_path"></param>
            /// <param name="p_ObjCrystalView"></param>
            /// <param name="ObjReport"></param>
            /// <param name="p_NomeSub"></param>
            public bool CarregarRelatorioSub(ArrayList nome_parametros, ArrayList valor_parametros, string p_path, CrystalReportViewer p_ObjCrystalView, ReportDocument ObjReport, string p_NomeSub, HttpResponse p_resp,  string Tipo_rel)
            {
                try
                {
                    p_ObjCrystalView.HasPageNavigationButtons = false;

                    p_ObjCrystalView.DisplayGroupTree = false;

                    p_ObjCrystalView.ReuseParameterValuesOnRefresh = true;

                    p_ObjCrystalView.ReportSource = ObjReport;

                    p_ObjCrystalView.Visible = true;

                    ObjReport.OpenSubreport(p_path);

                    ObjReport.Subreports[p_NomeSub].SetDatabaseLogon(DBLogin, DBPwd, DBServer, DataBase, false);

                    int cont = 0;

                    for (cont = 0; cont < valor_parametros.Count; cont++)
                    {
                        if (valor_parametros[cont].GetType().ToString() == "System.String")
                        {
                            ObjReport.Subreports[p_NomeSub].SetParameterValue(nome_parametros[cont].ToString(), valor_parametros[cont].ToString());
                        }
                        if (valor_parametros[cont].GetType().ToString() == "System.Int32")
                        {
                            ObjReport.SetParameterValue(nome_parametros[cont].ToString(), (int)(valor_parametros[cont]), p_NomeSub);
                        }
                    }
                    p_ObjCrystalView.ReportSource = ObjReport;

                    switch (Tipo_rel.ToUpper())
                    {
                        case "EXCEL":
                            ObjReport.ExportToHttpResponse(ExportFormatType.ExcelRecord, p_resp, false, "");
                            break;
                        case "PDF":
                            ObjReport.ExportToHttpResponse(ExportFormatType.PortableDocFormat, p_resp, false, "");
                            break;
                        case "WORD":
                            ObjReport.ExportToHttpResponse(ExportFormatType.WordForWindows, p_resp, false, "");
                            break;
                    }
                    
                    return true;
                }
                catch (Exception ex)
                {
                    //throw new Exception(ex.Message);
                    return false;
                }
            }      

            /// <summary>
            /// Destrutor da classe
            /// </summary>
            public void dispose()
            {
                GC.SuppressFinalize(this);
            }
        }
    }





    No seu web form faça a seguinte chamada

      // NOME DO RELATORIO
                string nome_rel = "report.rpt";

                ReportDocument ObjDocument = new ReportDocument();
                Crystal ObjCrystal = new Crystal();
                ArrayList ANomeParam = new ArrayList();
                ArrayList AValorParam = new ArrayList();

                //DEFINE O NOME DOS PARAMETROS E VALOR DOS PARAMETROS - NAO ESQUECER DE TROCAR OS VALORES
                ANomeParam.Add("@Nome");//parametro igual o da procedure
                object nome = "gustavo";// valor dos parametros
                AValorParam.Add(nome);           

                Session["nome_parametros"] = ANomeParam;
                Session["valor_parametros"] = AValorParam;
                Session["Path"] = @Server.MapPath(nome_rel);

                ObjCrystal.CarregarRelatorio((ArrayList)Session["nome_parametros"], (ArrayList)Session["valor_parametros"], Session["Path"].ToString(), CrystalReportViewer1, ObjDocument, this.Page.Response, "pdf");                          
                        

    Qualquer duvida estou a disposição





    quinta-feira, 24 de setembro de 2009 19:10
  • Bem... vamos lá...

    Tudo o que está no namespace: namespace STFSICRYSTAL
    eu tenho que criar uma nova classe para este código, ou eu coloco no load da página?

    o código que voce disse para eu colocar no webform eu faço um novo método ou coloco no load também?

    Esclarecendo... eu não criei o relatorio com stored procedure (pelo menos eu não fiz isso na mão), criei com o wizard do visual studio 2008. depois utilizei uma instancia do dbo em meu server local e incluí os campos no relatorio.
    Quando dou um preview, os dados aparecem normalmente.

    Agora preciso fazer o relatório funcionar no webform.

    Obrigado pela atenção.
    quinta-feira, 24 de setembro de 2009 19:20
  • 1- Crie uma classe com o primeiro codigo (STFSICRYSTAL).

    2- Pode ser no load mesmo. 

    3- Recomendo que vc use uma procedure para este exemplo. Senão não vai funcionar.

    4- Tire do seu web.config tudo q tiver a palavra Crystal(Faça um backup do web.config)


    Este relatorio vai abrir em pdf na pagina. 
    quinta-feira, 24 de setembro de 2009 19:29
  • Este código fica marcado em vermelho as informações que eu alimento.

     

    // mudar aqui

     

    this.DBServer = joao;

     

    this.DataBase = HeraSupport;

     

    this.DBLogin = DBAWeb;

     

    this.DBPwd = 11111111;

    DCRCTexto.Dispose();

    O DCRCT diz que não pertence ao contexto.

    quinta-feira, 24 de setembro de 2009 19:36
  • outra coisa... aqui o tipo Crystal não existe, e pergunta se está faltando alguma referencia.

     

    ReportDocument ObjDocument = new ReportDocument();

    Crystal ObjCrystal =

    new Crystal();

     

    ArrayList ANomeParam = new ArrayList();

     

    ArrayList AValorParam = new ArrayList();

    quinta-feira, 24 de setembro de 2009 19:41
  • Então.. isso é uma string.



    this.DBServer = "joao";
    this.DataBase = "HeraSupport";

    esse DCRCT  não precisa usar. Pode desconsiderar do seu codigo.

    qualquer duvida to no msn: eusouogustavo@hotmail.com
    quinta-feira, 24 de setembro de 2009 19:41
  • E o CRYSTAL???
    quinta-feira, 24 de setembro de 2009 19:43
  • add isso no seu web form

    aspx.cs

    using System;
    using STFSICRYSTAL;
    using CrystalDecisions.CrystalReports.Engine;
    using System.Collections;



    na parte design:

        <div>
            <CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" 
                AutoDataBind="True" DisplayGroupTree="False" DisplayToolbar="False" 
                EnableDatabaseLogonPrompt="False" EnableParameterPrompt="False" Height="50px" 
                ReportSourceID="CrystalReportSource1" ReuseParameterValuesOnRefresh="True" 
                Width="350px" />
            <CR:CrystalReportSource ID="CrystalReportSource1" runat="server">
                <Report FileName="report.rpt">
                </Report>
            </CR:CrystalReportSource>
        </div>


    quinta-feira, 24 de setembro de 2009 19:48
  • using System;
    using STFSICRYSTAL; // LUGAR ONDE ESTÁ A SUA CLASSE DO CRYSTAL
    using CrystalDecisions.CrystalReports.Engine;
    using System.Collections;
    quinta-feira, 24 de setembro de 2009 19:49
  • uhm...

    o relatorio apareceu em brando na tela e acima dele a mensagem, Load report fail...

    :(
    quinta-feira, 24 de setembro de 2009 19:53
  • sexta-feira, 25 de setembro de 2009 11:36
  • putz, cara... não fiz a procedure não...
    onde eu faço essa procedure, e como eu a faço?
    sexta-feira, 25 de setembro de 2009 12:57
  • só funciona com procedure.

    Cria uma procedure no banco de dados e insere no crystal. (Igual faz com as tabelas)


    sexta-feira, 25 de setembro de 2009 13:01
  • Péra ae, então deixa eu ver se entendi...

    Eu vou no meu banco de dados (SQL Server 2005) e vou criar um script a partir do meu banco, certo?

    Este script eu coloco no arquivo stfsiscrystal.cs? ou no arquivo .rpt?

    Eu nunca mexi com isso...
    sexta-feira, 25 de setembro de 2009 13:33
  • Não. Tem que criar uma procedure. Dá uma olhada na net como q faz.


    sexta-feira, 25 de setembro de 2009 14:23
  • Bem... vamos lá novamente...

    Eu criei um dataset (dataset1) e incluí a tabela Usuario (arrastando apartir do server explorer).
    Automaticamente o dataset1 criou uma tabela (Usuario) com o tableadapter (UsuarioTableAdapter).

    No formulário eu incluí um CrystalDataSource apontando para o relatório CRUsuarios.rpt
    e incluí um CrystalReportViewer apontando para o CrystalReportSource1.

    Criei no metodo page_load do formulario o seguinte codigo:

            protected void Page_Load(object sender, EventArgs e)
            {
                //Popula o DataSet
                UsuarioTableAdapter.Fill(Usuario);
    
                //Instancia um objeto da classe que é a abstração do relatório
                CRUsuarios rpt = new CRUsuarios();
    
                //Define a fonte de dados para o relatório
                rpt.SetDataSource(Usuario);
    
                //Define qual será o relatório que o viewer irá exibir
                CrystalReportViewer1.ReportSource = rpt;
    
                //Conecta o viewer com o relatório
                CrystalReportViewer1.DataBind();
    
    
            }
    Porém "Usuario" fica marcado de azul dizendo que não existe neste contexto.
    Ora... Usuario é a tabela do dataset1. Como eu preencho esta tabela para ela ser a base do crystal report?

    E outra... quando eu tento vizualizar no browser, aparece o erro:

    Mensagem de Erro do Analisador: Não foi possível carregar o tipo 'CristalReports._Default'.

    Erro de Origem:

    Linha 1:  <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ReportViewPage.aspx.cs" Inherits="CristalReports._Default" %>
    

    O que é isso?


    quinta-feira, 1 de outubro de 2009 14:40
  • Estranho...

    Quando eu insiro o Crystalviewer e crio o Crystaldatasource no arquivo default.aspx, o relatório funciona.
    Se eu crio um novo webform com qualquer nome e faço o mesmo procedimento, o relatorio não funciona.
    Aparece a mesma mensagem: Fail loading report.

    Este é o código do default.aspx:
    <%@ Page Language="C#" AutoEventWireup="true" MasterPageFile="~/HeraSupportSiteMP.master" CodeFile="Default.aspx.cs" Inherits="_Default" %>
    
    <%@ Register assembly="CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" namespace="CrystalDecisions.Web" tagprefix="CR" %>
    
    <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    
        <CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" 
        AutoDataBind="True" Height="1106px" ReportSourceID="CrystalReportSource1" 
        Width="876px" />
        <CR:CrystalReportSource ID="CrystalReportSource1" runat="server">
            <Report FileName="Views\Details\CRUsuarios.rpt">
            </Report>
    </CR:CrystalReportSource>
    
    </asp:content>
    E este é o codigo do webform novo:
    <%@ Page Title="" Language="C#" MasterPageFile="~/HeraSupportSiteMP.master" AutoEventWireup="true" CodeFile="RptUsuarios.aspx.cs" Inherits="Views_Details_RptUsuarios" %>
    
    <%@ Register assembly="CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" namespace="CrystalDecisions.Web" tagprefix="CR" %>
    
    <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    
        <CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" 
        AutoDataBind="True" Height="50px" ReportSourceID="CrystalReportSource1" 
        Width="350px" />
    <CR:CrystalReportSource ID="CrystalReportSource1" runat="server">
        <Report FileName="Views\Details\CRUsuarios.rpt">
        </Report>
    </CR:CrystalReportSource>
    
    </asp:content>
    Eu não vi diferença significativa... o relatorio só funciona no default???
    Eu posso criar varios defaults???




    quinta-feira, 1 de outubro de 2009 15:17
  • Qual o nome dessa pagina?
    quinta-feira, 1 de outubro de 2009 15:57
  • A que funciona se chama Default.aspx e a que nao funciona se chama RptUsuarios.aspx
    quinta-feira, 1 de outubro de 2009 17:21
  • Puxa vida... voces nem vao acreditar...

    O crystaldatasource estava apontando para o arquivo .rpt, até aí ok, o problema é que o caminho estava errado.

    Quando eu selecionava o relatorio da lista de relatorios, dava errado, mas se eu clicava em browse, aparecia o caminho completo.

    Agora deu certo.
    • Marcado como Resposta joaoluizbt quinta-feira, 1 de outubro de 2009 17:43
    quinta-feira, 1 de outubro de 2009 17:43