Usuário com melhor resposta
VISUAL STUDIO - ASP.NET - C# - CRYSTAL REPORTS - QUANDO NAO TEM DADOS PARA VISUALIZAÇAO

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
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
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
-