none
VISUAL STUDIO - ASP.NET - C# - CRYSTAL REPORTS - QUANDO NAO TEM DADOS PARA VISUALIZAÇAO RRS feed

  • Pergunta

  • Senhores, 

    Eu tenho em uma aplicação gerada pelo Visual Studios 2010, usando o Crystal Report, em c#,  que está funcionando perfeitamente, ou seja, quando eu tenho dados em minha query gerar certinho. Agora quando eu vou usar o relatório e não teria nada de registro na minha query para trazer ele está dando um erro conforme abaixo:

    Uma coluna chamada 'EhAberto' já pertence a esta DataTable.

    O campo Ehaberto pode ignorar a questão mesmo é que eu fiz de propósito para não ter dados para serem impresso para ver o que irá acontecer.

    Segue meu codigo abaixo:

    namespace SistemaControleCurso.Relatorio
    {
        public partial class wfRelParcelas : System.Web.UI.Page
        {

            CsBdConexao Cnn = new CsBdConexao();
            int RelContador = 0;


            protected void Page_Load(object sender, EventArgs e)
            {

                    ReportDocument objReport = new ReportDocument();
                    objReport.Load(Server.MapPath("CrParcelas.rpt"));
                    objReport.SetDataSource(this.ObterDados());
                    this.CrystalReportViewer1.ReportSource = objReport;

            }

            private List<CsParcelas> ObterDados()
            {

                SqlConnection con = new SqlConnection(Cnn.FuncaoStrConexao());
                string query = "select p.IdParcela,al.Nome aluno,pes.Nome pessoa,p.IdMatricula,mtr.Nome materia,p.valor, " +
                               " p.Tipo,p.EhCancelado, emp.Nome empresa,Convert(varchar(10),p.DataVencimento,103) DataVencimento,     " +
                               " p.valor,p.ValorDesconto, p.ValorDescontoVcto,p.ValorTotal," +
                               " p.EhAberto, p.EhBoleto" +
                               " from fn_parcela p     " +
                               " left join Ac_Aluno al on al.IdAluno = p.IdAgencia   " +
                               " left join Gn_Pessoa pes on pes.IdPessoa = p.IdAluno   " +
                               " left join Fn_Matricula mt on mt.IdMatricula = p.IdMatricula   " +
                               " left join Ac_Material mtr on mtr.IdMaterial = p.IdMaterial   " +
                               " left join Gn_Empresa emp on emp.IdEmpresa = p.IdEmpresa " + Convert.ToString(Session["SesParamFiltro"]);
                SqlDataAdapter da = new SqlDataAdapter(query, con);
                DataTable dt = new DataTable();
                da.Fill(dt);


                List<CsParcelas> lst = new List<CsParcelas>();

                foreach (DataRow r in dt.Rows)
                {
                    CsParcelas c = new CsParcelas();

                    c.aluno = r["aluno"].ToString();
                    c.EhCancelado = r["EhCancelado"].ToString();
                    c.empresa = r["empresa"].ToString();
                    c.IdMatricula = r["IdMatricula"].ToString();
                    c.IdParcela = r["IdParcela"].ToString();
                    c.materia = r["materia"].ToString();
                    c.pessoa = r["pessoa"].ToString();
                    c.Tipo = r["Tipo"].ToString();
                    c.valorParcela = Convert.ToDecimal(r["valor"]);
                    c.ValorDesconto = Convert.ToDecimal(r["ValorDesconto"]);
                    c.ValorDescontoVcto = Convert.ToDecimal(r["ValorDescontoVcto"]);
                    c.ValorTotal = Convert.ToDecimal(r["ValorTotal"]);
                    c.DataVencimento = r["DataVencimento"].ToString();
                    c.EhBoleto = r["EhBoleto"].ToString();
                    c.EhAberto = r["EhAberto"].ToString();

                    lst.Add(c);

                }

                return lst;

            }

            protected void Button1_Click1(object sender, EventArgs e)
            {
                this.Response.Redirect(this.Request.CurrentExecutionFilePath + "?ACT=CSPARCELAS");
            }
        }
    }

    Qual é o tratamento que eu devo fazer quando ele não localiza nada no objReport.SetDataSource(this.ObterDados()); ou se preciso alterar alguma questão nas propriedades dos objetos? Quero dar uma mensagem "nada a emitir" por exemplo, para eu possa avisar ao usuário. 

    Obrigado desde já.

    Kelsen


    Kelsen Nunes

    sexta-feira, 6 de dezembro de 2013 19:55

Respostas

  • Kelsen eu sempre procurei uma solução para isso, mais infelizmente não achei algo que fique descente, o que vc pode fazer é executar seu select mais de uma vez, achando dados vc chama o método e executa o select novamente e gera o relatório, caso contrário vc apresenta uma mensagem de erro, ou vc pode colocar seu relatório em uma janela pop-up e faz esse procedimento, faz a consulta e verifica se não houver dados vc nem abre o pop-up mostra logo a mensagem de erro, se achar chama o pop-up executa novamente a mesma consulta e exibe o relatório. 

    Junior

    • Sugerido como Resposta Junior_luiz quinta-feira, 12 de dezembro de 2013 13:51
    • Marcado como Resposta Giovani Cr sexta-feira, 13 de dezembro de 2013 15:49
    segunda-feira, 9 de dezembro de 2013 13:21

Todas as Respostas

  • Kelsen eu sempre procurei uma solução para isso, mais infelizmente não achei algo que fique descente, o que vc pode fazer é executar seu select mais de uma vez, achando dados vc chama o método e executa o select novamente e gera o relatório, caso contrário vc apresenta uma mensagem de erro, ou vc pode colocar seu relatório em uma janela pop-up e faz esse procedimento, faz a consulta e verifica se não houver dados vc nem abre o pop-up mostra logo a mensagem de erro, se achar chama o pop-up executa novamente a mesma consulta e exibe o relatório. 

    Junior

    • Sugerido como Resposta Junior_luiz quinta-feira, 12 de dezembro de 2013 13:51
    • Marcado como Resposta Giovani Cr sexta-feira, 13 de dezembro de 2013 15:49
    segunda-feira, 9 de dezembro de 2013 13:21
  • Pensei em fazer dessa forma, mas antes acreditava que tinha uma solução. Meus relatórios estão como pop mesmo. vou fazer dessa forma. Valeu Junior.

    Kelsen Nunes

    quarta-feira, 11 de dezembro de 2013 16:41