SELE?ÃO CRYSTAL
Olá, tenho um relatório feito no crystal do VS 2012 (em C# e bd Access2007) e um dos campos do corpo relatório é tipo data. Coloquei em um form duas maskedbox formatadas em ddmmyyyy para selecionar um perÃodo de datas e um combo para selecionar a categoria a ser impressa. Ou seja, imprimir todos contatos (nomes, telefones,..) da agenda que pertencem a categoria selecionada no combobox. Não tenho ideia de como funciona essa seleção. Vi em alguns sites que tem de criar parâmetros, em outros não, mas a maioria é com sqlServer e estou usando Access.
Por enquanto consigo apenas imprimir tudo sem seleção conforme mostra abaixo.
private void crvRegSelecao_Load(object sender, EventArgs e)
{
ReportDocument rd = new ReportDocument();
rd.Load(@[Ô]C:\Users\Info\Desktop el\Telefonia\Telefonista\Telefonista\RPT\RelRegistroChamadas.rpt[Ô]);
crvRegSelecao.ReportSource = rd;
}
Por enquanto consigo apenas imprimir tudo sem seleção conforme mostra abaixo.
private void crvRegSelecao_Load(object sender, EventArgs e)
{
ReportDocument rd = new ReportDocument();
rd.Load(@[Ô]C:\Users\Info\Desktop el\Telefonia\Telefonista\Telefonista\RPT\RelRegistroChamadas.rpt[Ô]);
crvRegSelecao.ReportSource = rd;
}
Olá, achei esse código para seleção por data na qual estou tentando implementar mas não está funcionando. Desde que comecei a usar o Visual Studio 2012 pro tem uma coisa que não consegui entender direito em relatórios com o Crystal Reports do próprio VS 2012: quando montamos o relatório em modo design conectamos ele ao banco que de uma certa forma faz internamente um tipo de consulta ou select. Então pergunto: se no meu código eu fazer uma consulta SQL nesse mesmo relatório essa nova consulta sobrepõe a que foi usada na construção do relatório??? Pergunto pois já tentei vários códigos e nenhum faz a seleção que preciso: como parâmetros o intervalo de datas e mais o que está selecionado no combo (por nome ou categoria), está sempre me retornando TODOS os dados da tabela. O código abaixo exemplifica o que escrevi anteriormente mas não está funcionando. O que falta????
Código do form que chama o form do Relatório
private void button1_Click(object sender, EventArgs e)
{
string dataSel = mskDe.Text;
DateTime dtInicio = Convert.ToDateTime(dataSel);
string dataSel2 = mskAte.Text;
DateTime dtFim = Convert.ToDateTime(dataSel2);
string sql = [Ô]SELECT * FROM ConsultaRegistro WHERE Nome + cmbContato.SelectedValue + AND dataReg >= #[Ô] + dtInicio + [Ô]# AND dataReg <= #[Ô] + dtFim + [Ô]#[Ô];
frmRelLigacoesSelecao filho = new frmRelLigacoesSelecao();//form do relatório
filho.Show();
this.Dispose();
}
form do Relatório
private void crvRegSelecao_Load(object sender, EventArgs e)
{
ReportDocument rd = new ReportDocument();
rd.Load(@[Ô]C:\Users\Info\Desktop el\Telefonia\Telefonista\Telefonista\RPT\RelRegistroChamadas.rpt[Ô]);
crvRegSelecao.ReportSource = rd;
}
ALAN
Código do form que chama o form do Relatório
private void button1_Click(object sender, EventArgs e)
{
string dataSel = mskDe.Text;
DateTime dtInicio = Convert.ToDateTime(dataSel);
string dataSel2 = mskAte.Text;
DateTime dtFim = Convert.ToDateTime(dataSel2);
string sql = [Ô]SELECT * FROM ConsultaRegistro WHERE Nome + cmbContato.SelectedValue + AND dataReg >= #[Ô] + dtInicio + [Ô]# AND dataReg <= #[Ô] + dtFim + [Ô]#[Ô];
frmRelLigacoesSelecao filho = new frmRelLigacoesSelecao();//form do relatório
filho.Show();
this.Dispose();
}
form do Relatório
private void crvRegSelecao_Load(object sender, EventArgs e)
{
ReportDocument rd = new ReportDocument();
rd.Load(@[Ô]C:\Users\Info\Desktop el\Telefonia\Telefonista\Telefonista\RPT\RelRegistroChamadas.rpt[Ô]);
crvRegSelecao.ReportSource = rd;
}
ALAN
a data passada pra query deve ser no mesmo formato da data no bd, data existe o between
select campo from tabela where data between datainicio and datafinal
no seu where falta algo pro nome nome like? nome =? ta nome e o campo do form direto, se acertar isso da forma q aplicou data ali já devera funcionar
select campo from tabela where data between datainicio and datafinal
no seu where falta algo pro nome nome like? nome =? ta nome e o campo do form direto, se acertar isso da forma q aplicou data ali já devera funcionar
NICKOSOFT, já fiz várias alterações no where conforme indicaste acima, mas não dá nenhum efeito. O código passa batido e não enxerga as datas, retorna todos os dados da tabela : todas as pessoas que estão no registro de chamadas sem filtrar o nome do combo e sem usar o perÃodo das datas.Na tabela do banco o campo DATAREG, que vou usar para definir as datas é do tipo data/hora. Alguma ideia ?????
ALAN
ALAN
mas o combo é preenchido com dados pra value? ou so dados escritos sem valuemember
da forma q esta postado no inicio
string sql = [Ô]SELECT * FROM ConsultaRegistro WHERE Nome + cmbContato.SelectedValue + AND dataReg >= #[Ô] + dtInicio + [Ô]# AND dataReg <= #[Ô] + dtFim + [Ô]#[Ô];
faltam coisas
string sql = [Ô]SELECT * FROM ConsultaRegistro WHERE Nome like [Ô] + cmbContato.SelectedValue + [Ô] AND dataReg >= #[Ô] + dtInicio + [Ô]# AND dataReg <= #[Ô] + dtFim + [Ô]#[Ô];
sendo a data no mesmo formato do banco, diz q usa um mask formatado pra ddmmyyyy então a data no banco segue esse padrão ddmmyyyy? se o campo esta date no banco não é esse formato q deve estar
da forma q esta postado no inicio
string sql = [Ô]SELECT * FROM ConsultaRegistro WHERE Nome + cmbContato.SelectedValue + AND dataReg >= #[Ô] + dtInicio + [Ô]# AND dataReg <= #[Ô] + dtFim + [Ô]#[Ô];
faltam coisas
string sql = [Ô]SELECT * FROM ConsultaRegistro WHERE Nome like [Ô] + cmbContato.SelectedValue + [Ô] AND dataReg >= #[Ô] + dtInicio + [Ô]# AND dataReg <= #[Ô] + dtFim + [Ô]#[Ô];
sendo a data no mesmo formato do banco, diz q usa um mask formatado pra ddmmyyyy então a data no banco segue esse padrão ddmmyyyy? se o campo esta date no banco não é esse formato q deve estar
NICKOSOFT, para não perder tempo e não ficarmos conjecturando problemas, segue a parcial do projeto. Para ver onde parei ir até: Relatórios ---> Registro de Ligações. Não estranhe se tiver um gridview na mesma tela. Coloquei ele lá apenas para visualisar os dados já cadastrados e ver as datas para teste. Depois o gridview será excluido.
ALAN
ALAN
Só pra acrescentar, pra ser feito um filtro por datas no access vc deve converter para o formato mm/dd/yyyy. isso mesmo! primeiro o mês depois o dia depois o ano. Valeu!
puro erro de logica, a data nem era o grave....
private void button1_Click(object sender, EventArgs e)
{
string dataSel = mskDe.Text;
DateTime dtInicio = Convert.ToDateTime(dataSel);
string dataSel2 = mskAte.Text;
DateTime dtFim = Convert.ToDateTime(dataSel2);
string sql = [Ô]SELECT * FROM ConsultaRegistro WHERE codcontato like [Ô] + cmbContato.SelectedValue + [Ô] AND dataReg >= #[Ô] + dtInicio + [Ô]# AND dataReg <= #[Ô] + dtFim + [Ô]#[Ô];
PreencherGRID(sql);
//DataSet ds = new DataSet();
//DataTable dt = new DataTable();
//dataGridView1.DataSource = dt;
// ds.Tables.Add(dt);
//frmRelLigacoesSelecao filho = new frmRelLigacoesSelecao();//form do relatório
//filho.Show();
//this.Dispose();
}
Bom dia, demorei mas voltei.NICKOSOFT, usei o código acima e filtrou por data legal. Bom agora o que preciso, como postei acima seria então imprimir os dados filtrados. Fica complicado a partir do conteúdo do próprio datagridview filtrado???
Alan
Alan
faço em vb de uma forma completamente diferente os meus relatórios, uso um dataset dentro do projeto como base de dados pros relatórios e preencho esse dataset com a query q alimentou o datagrid
Dim Tabela As New dsSeibo.dtAlunosGeralDataTable
aqui o dataset e a datatable q estarei alimentando
Dim Linha As dsSeibo.dtAlunosGeralRow
Dim Manipula As New clsBD
minhas classes
Dim BuscaAluno As String = [Ô]SELECT *, case alunos.situacao When [ô]1[ô] then [ô]Ativo[ô] When [ô]2[ô] Then [ô]Isento[ô] when [ô]3[ô] then [ô]Inativo[ô] end As SituStr FROM alunos order by nome asc[Ô]
Dim DS As DataSet
DS = Manipula.RetornaDS(BuscaAluno)
o dataset dinâmico sendo alimentado pelo retorno da função de dentro da classe
If DS.Tables(0).Rows.Count <= 0 Then
MessageBox.Show([Ô]Não foram encontrados alunos[Ô])
Else
for agora alimenta o datatable dentro do dataset q é a fonte do relatorio
For pR = 0 To DS.Tables(0).Rows.Count - 1
Linha = Tabela.NewRow()
Linha([Ô]id[Ô]) = DS.Tables(0).Rows(pR).Item([Ô]id[Ô]).ToString
Linha([Ô]nome[Ô]) = DS.Tables(0).Rows(pR).Item([Ô]nome[Ô]).ToString
Linha([Ô]situacao[Ô]) = DS.Tables(0).Rows(pR).Item([Ô]situacao[Ô]).ToString
Linha([Ô]entrada[Ô]) = DS.Tables(0).Rows(pR).Item([Ô]entrada[Ô]).ToString
Linha([Ô]saida[Ô]) = DS.Tables(0).Rows(pR).Item([Ô]saida[Ô]).ToString
Linha([Ô]situstr[Ô]) = DS.Tables(0).Rows(pR).Item([Ô]situstr[Ô]).ToString
Linha([Ô]criterio[Ô]) = [Ô]Geral[Ô]
Tabela.AdddtAlunosGeralRow(Linha)
Next
Dim DT As DataTable = Tabela
[ô]Instanciando/Setando Objeto ReportDocument
Dim oRP As ReportDocument
oRP = New crpAlunosGerais [ô]nome do relatorio
oRP.SetDataSource(DT)
[ô]Exibindo Relatório
Dim tela As New frmRelatorio
tela.Tag = [Ô]Relatorio Geral Alunos[Ô]
tela.CrystalReportViewer1.ReportSource = oRP
tela.CrystalReportViewer1.RefreshReport()
tela.ShowDialog()
End If
NICKOSOFT, com a tua ajuda dos exemplos acima e mais uma classe de impressão de datagridview que peguei em : http://pplware.sapo.pt/tutoriais/tutorial-c-imprimir-conteudo-da-datagridview/, misturei tudo e deu certo como eu precisava. Valeu pela ajuda. Estou encerrando!!!!
Alan
Alan
Tópico encerrado , respostas não são mais permitidas