none
Como gerar relatório reportViewer filtrando os parâmetros RRS feed

  • Pergunta

  • Olá pessoal,

    Na minha base de dados tenho informações com campos Ano, mês, nome, etc... gerar um relatório com tudo consigo beleza. Mas o que preciso: colocar uma combo contendo os meses e outra os anos para que eu possa gerar um relatório baseado nos parâmetros dessas combos. Tipo, seleciono Mês MAIO e ano 2013, clico gerar relatório e ele me gera apenas com os dados do mês de maio de 2013.

    Utilizo C# e base de dados Access.

    Peço ajuda e desde já agradeço! 

    terça-feira, 21 de janeiro de 2014 00:54

Todas as Respostas

  • Olá,

    crie os filtros que você deseja que o usuário informe, passe esses dados como parâmetro para sql que está usando para buscar as informações. 

    Feito isso basta carregar o .rdlc da mesma forma que está carregando.

    Se tiver dificuldade para fazer isso, poste seu código e fale o que não entendeu, que vou te ajudando.

    Att,

    Wennder A. dos Santos

    Se minha resposta solucionou seu problema ou sua dúvida marque como Resposta ou se foi útil marque como útil. Isso ajuda outras pessoas com o mesmo problema ou dúvida.



    terça-feira, 21 de janeiro de 2014 01:45
  • Olá,

    crie os filtros que você deseja que o usuário informe, passe esses dados como parâmetro para sql que está usando para buscar as informações. 

    Feito isso basta carregar o .rdlc da mesma forma que está carregando.

    Se tiver dificuldade para fazer isso, poste seu código e fale o que não entendeu, que vou te ajudando.

    Att,

    Wennder A. dos Santos

    Se minha resposta solucionou seu problema ou sua dúvida marque como Resposta ou se foi útil marque como útil. Isso ajuda outras pessoas com o mesmo problema ou dúvida.

    Olá Wennder,

    Estou gerando relatórios parametrizados diretamente das textbox via parâmetros, onde informo o parâmetro no form_Load gerando o relatório, mas via sql estou meio perdido de como montar. Se puder me dar um exemplo (pois ainda não sou profissional no negócio). Obrigado por enquanto!

    terça-feira, 21 de janeiro de 2014 10:39
  • Olá,

    vamos por partes:

    1) Crie uma classe para realizar a consulta das informações.

    2) Na classe criada, crie um método recebendo os parâmetros que você vai permitir o usuário informar. No método crie uma variável DataTable e sua consulta. O resultado da consulta você joga dentro do datatable. Exemplo:

    public DataTable PorOperadorDetalhado(string operador, string codloja, DateTime datainicio, DateTime datafim, string conexao)
             {
              DataTable dt = new DataTable(); //Declarando DataTable
            dt.Columns.Add("operador"); //Adicionando colunas 
            dt.Columns.Add("datar");
            dt.Columns.Add("nomeproduto");
            dt.Columns.Add("quantidade");
            dt.Columns.Add("valor");
            dt.Columns.Add("comissao");
            dt.Columns.Add("total");
            dt.Columns.Add("cancelado");
    
            SqlCommand comando =new SqlCommand();
            comando.Connection = new SqlConnection(conexao);
            comando.CommandType = CommandType.Text;
            comando.CommandText = "SET DATEFORMAT DMY SELECT CASE WHEN b.nome IS NULL THEN 'Operador deletado' ELSE b.nome END as operador," +
                                  " CASE WHEN isnull(a.cancelado,'') <> 'S' THEN '0' ELSE '1' END AS cancelado," +
                                  " a.datar, a.nome, a.quantidade, a.valor, a.comissao, a.total" +
                                  " FROM rdata a LEFT JOIN vendas b ON left(a.funcionar,2) = b.codigo" +
                                  " WHERE left(a.funcionar,2) IN(" + operador + ") AND b.codloja IN(" + codloja + ") AND a.datar BETWEEN '" + datainicio + " 00:00:00' AND '" + datafim + " 23:59:59'" +
                                  " GROUP BY b.nome, a.nome, a.datar, a.quantidade, a.valor, a.comissao, a.total, a.cancelado ORDER BY a.datar"; //Minha consulta com os parametros
            try
            {
                comando.Connection.Open();
                SqlDataReader leia = comando.ExecuteReader();
                if (leia.HasRows) 
                {
                    while (leia.Read())
                    {
                        DataRow linha  = dt.NewRow(); //crio uma linha para o datatable
                        linha["operador"] = leia.GetString(0); //populando a linha
                        linha["datar"] = leia.GetString(1);
                        linha["nomeproduto"] = leia.GetString(2);
                        linha["quantidade"] = leia.GetString(3);
                        linha["valor"] = leia.GetString(4);
                        linha["comissao"] = leia.GetString(5);
                        linha["total"] = leia.GetString(6);
                        linha["cancelado"] = leia.GetString(7);
                        dt.Rows.Add(linha); //adicionando nova linha ao datatable
            }
            }
                return dt;
            }
            catch (Exception ex)
                {
                throw new Exception(ex.Message);
                }
            finally
            {
                comando.Connection.Close();
            }
             

    Esse método retorna as vendas realizadas por operador(es) em determinado periodo (passado nos parâmetros datainicio e datafim) em uma loja x (passada no parâmetro codloja, pode ser mais de uma).

    Implemente isso com sua estrutura e de um retorno para continuar.

    Att

    Wennder A. Santos

    Se foi útil, marque como útil. Se respondeu sua pergunta ou sanou sua dúvida, marque como resposta.







    terça-feira, 21 de janeiro de 2014 11:14
  • Wennder, os códigos acima já me deram uma boa ideia de como trabalhar, porém criei um através do TableAdapter e BindingSource os esquemas da tabela como eu precisava. Já consegui buscar os dados e gerar no ReportViewer, só encalhei no filtro do SQL... Pelo QueryBuilder implementando o seguinte funciona OK:

    SELECT        ID, Ano, Mes, Portaria, DiarioOficial, DataDiarioOficial, Pagina, Matricula, Nome, Descricao, Periodo, GeraPortaria, FinalizarRegistro
    FROM            CadControlePortarias
    

    Como acima busca blza e gera OK, mas preciso colocar neste código SQL acima dois campos (filtros): Ano e Mês que tenho em duas combobox, seria algo mais ou menos assim:

    SELECT        ID, Ano, Mes, Portaria, DiarioOficial, DataDiarioOficial, Pagina, Matricula, Nome, Descricao, Periodo, GeraPortaria, FinalizarRegistro
    FROM            CadControlePortarias
    WHERE        Mes = 'cboTesteImpressao.[Text]' e Ano ?????? Aqui encalhei e não consegui filtrar... 

    Alguma ajuda?


    terça-feira, 21 de janeiro de 2014 21:56
  • Olá,

    os combos apresentam o mês e o ano em inteiro? Exemplo: 01/2014 ? 

    Qual o tipo de valor da coluna mês e da coluna ano no seu banco?

    Wennder

    terça-feira, 21 de janeiro de 2014 23:18
  • Olá,

    os combos apresentam o mês e o ano em inteiro? Exemplo: 01/2014 ? 

    Qual o tipo de valor da coluna mês e da coluna ano no seu banco?

    Wennder

    Olá,

    As duas são de formato texto.

    Att.,

    terça-feira, 21 de janeiro de 2014 23:27
  • InfoGeógrafo,

    poste o código que você esta carregando os combos fazendo favor.

    Wennder

    quarta-feira, 22 de janeiro de 2014 00:30
  • InfoGeógrafo,

    poste o código que você esta carregando os combos fazendo favor.

    Wennder

    Segue o código que consta no Form que carrega os combos (os dois combos estão no final do código):

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.OleDb;
    
    namespace slçTransferindo
    {
        public partial class frmControlePortarias : Form
        {
            public frmControlePortarias()
            {
                InitializeComponent();
                PreencheDGWdados();
                txtAno.Format = DateTimePickerFormat.Custom;
                txtAno.CustomFormat = "yyyy";
                gbInserirDados.Enabled = false;
    
               
    
            }
    
            private void frmControlePortarias_Load(object sender, EventArgs e)
            {
               
               
                this.WindowState = FormWindowState.Maximized;
            }
    
    
            private void SalvarDados()
            //Salva os dados inseridos
            {
                string strConnSdS = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\dbSigae.mdb;Persist Security Info=True;";
                string strSQLsDs = "INSERT INTO CadControlePortarias (ID, Ano, Mes, Portaria, DiarioOficial, DataDiarioOficial, Pagina, Matricula, Nome, Descricao, Periodo, GeraPortaria, FinalizarRegistro)"
                     + " VALUES ('" + txtID.Text + "', '" + txtAno.Text + "', '" + txtMes.Text + "', '" + txtPortaria.Text + "', '" + txtDiarioOficial.Text + "', '" + txtDataDO.Text + "', '" + txtPg.Text + "', '" + txtMatricula.Text + "', '" + txtNome.Text + "', '" + txtDescricao.Text + "', '" + txtPeriodo.Text + "', '" + txtGeraPortaria.Text + "', '" + txtFinalizaRegistro.Text + "')";
                //Cria conexão com a BD:
                OleDbConnection dbConnection = new OleDbConnection(strConnSdS);
                //Cria comando que starta a query:
                OleDbCommand cmdQuery = new OleDbCommand(strSQLsDs, dbConnection);
    
                try
                {
                    //Abre o banco:
                    dbConnection.Open();
                    //Executa a query:
                    cmdQuery.ExecuteNonQuery();
                    gbInserirDados.Enabled = false;
                    
                    DialogResult DRRegistro = MessageBox.Show("O registro foi gravado com sucesso. \n Informar novo registro?", "Informação", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                    if (DRRegistro == DialogResult.Yes)
                    {
                        PreencheDGWdados();
                        InserirNovosDados();
                    }
                    if (DRRegistro == DialogResult.No)
                    {
                        PreencheDGWdados();
                        gbInserirDados.Enabled = false;
                        btSalvar.Enabled = false;
                    }
    
    
    
                }
                catch (OleDbException ex)
                {
                    MessageBox.Show("Erro: " + ex.Message);
                }
    
                finally
                {
                    dbConnection.Close();
                }
            }
    
           
    
            private void btInserirNovo_Click(object sender, EventArgs e)
            {
                InserirNovosDados();
                HabilitaCamposNaoAlteraveis();
                btExcluir.Enabled = false;
                btFinalizar.Enabled = false;
            }
    
    
    
            private void txtFinalizaRegistro_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (txtGeraPortaria.Text == "SIM" && txtFinalizaRegistro.Text == "SIM")
                {
                    txtPortaria.Enabled = true;
                    txtDiarioOficial.Enabled = true;
                    txtDataDO.Enabled = true;
                    txtPg.Enabled = true;
                    
                }
                if (txtGeraPortaria.Text == "SIM" && txtFinalizaRegistro.Text == "NÃO")
                {
                    txtPortaria.Enabled = false;
                    txtDiarioOficial.Enabled = false;
                    txtDataDO.Enabled = false;
                    txtPg.Enabled = false;
                    
                }
            }
    
            private void btSalvarAlteracao_Click(object sender, EventArgs e)
            {
                SalvarDados();
            }
    
            private void InserirNovosDados()
            {
                LimpaTodosOsCampos();
                gbInserirDados.Enabled = true;
                txtMes.Focus();
                Random nR = new Random();
                int NroID = nR.Next(0, 999999);
                txtID.Text = NroID.ToString();
                txtFinalizaRegistro.Text = "NÃO";
                btSalvar.Enabled = true;
            }
    
          
    
           private void dgwRegPortarias_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
           {
               if (e.ColumnIndex == 13)
               {
                   var SitStatus = Convert.ToString(e.Value);
    
                   if (SitStatus != "SIM")
                   {
                       DataGridViewRow linha = dgwRegPortarias.Rows[e.RowIndex];
                       linha.Cells[0].Value = "EM ABERTO";
                       //linha.Cells[0].Style.ForeColor = Color.Green;
                       linha.DefaultCellStyle.BackColor = Color.LightBlue;
                   }
    
                   else
                   {
                       DataGridViewRow linha = dgwRegPortarias.Rows[e.RowIndex];
                       linha.Cells[0].Value = "CONCLUÍDA";
                       linha.DefaultCellStyle.BackColor = Color.Lavender;
                   }
               }
           }
    
           private void btFechar_Click(object sender, EventArgs e)
           {
               Close();
           }
    
    
    
           private void ExcluirDados()
           //Exclui os dados da matricula selecionada
           {
               //string de conexão com a DB:
               string strConnExlcui = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\dbSigae.mdb;Persist Security Info=True;";
               //string cmd SQL:
               string strSQLexclui = "DELETE FROM CadControlePortarias WHERE ID = '" + (txtID.Text) + "'";
               //cria a conexão com o DB:
               OleDbConnection dbConnection = new OleDbConnection(strConnExlcui);
               //cria o comando que inicia a instrução SQL
               OleDbCommand cmdExcluir = new OleDbCommand(strSQLexclui, dbConnection);
    
               try
               {
                   dbConnection.Open();
                   
                   DialogResult DRExcluir = MessageBox.Show("Deseja realmente excluir este registro?", "Confirmação", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                   if (DRExcluir == DialogResult.Yes)
                   {
                       cmdExcluir.ExecuteNonQuery();
                       MessageBox.Show("Os dados foram excluidos com sucesso.", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information);
                       LimpaTodosOsCampos();
                       PreencheDGWdados();
                       gbInserirDados.Enabled = false;
                   }
                   if (DRExcluir == DialogResult.No)
                   {
                       LimpaTodosOsCampos();
                       PreencheDGWdados();
                       gbInserirDados.Enabled = false;
                   }
    
                   
                   
               }
               catch (OleDbException ex)
               {
                   MessageBox.Show("Erro: " + ex.Message);
               }
               finally
               {
                   //fecha a conexão
                   dbConnection.Close();
               }
    
           }
    
           private void btExcluir_Click(object sender, EventArgs e)
           {
               ExcluirDados();
           }
    
    
           private void SelecionaDadosReferencia()
           {
               txtID.Text = dgwRegPortarias.SelectedCells[1].Value.ToString();
           }
    
    
    
           private void JogaDadosGridNosCampos()
           //seleciona os dados do grid para jogar dentro dos campos para alteração de acordo com a matrícula 
           // selecionada na rotina SelecionaDadosMatricula
           {
               try
               {
                   OleDbDataReader vDados;
                   //Define a conexão com o provedor de dados:
                   string strConnSeleciona = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\dbSigae.mdb;Persist Security Info=True;";
                   //Abre o banco de dados:
                   OleDbConnection dbConnection = new OleDbConnection(strConnSeleciona);
                   dbConnection.Open();
                   //Define a instrução SQL:
                   OleDbCommand cmdSQLSeleciona = new OleDbCommand("SELECT * FROM CadControlePortarias WHERE ID = '" + (txtID.Text) + "'", dbConnection);
    
                   vDados = cmdSQLSeleciona.ExecuteReader();
                   while (vDados.Read())
                   {
                       //txtAno.Text = vDados["Ano"].ToString();
                       txtMes.Text = vDados["Mes"].ToString();
                       txtPortaria.Text = vDados["Portaria"].ToString();
                       txtDiarioOficial.Text = vDados["DiarioOficial"].ToString();
                       txtDataDO.Text = vDados["DataDiarioOficial"].ToString();
                       txtPg.Text = vDados["Pagina"].ToString();
                       txtMatricula.Text = vDados["Matricula"].ToString();
                       txtNome.Text = vDados["Nome"].ToString();
                       txtDescricao.Text = vDados["Descricao"].ToString();
                       txtPeriodo.Text = vDados["Periodo"].ToString();
                       txtGeraPortaria.Text = vDados["GeraPortaria"].ToString();
                       //txtFinalizaRegistro.Text = vDados["FinalizarPortaria"].ToString();
    
                   }
    
                   vDados.Close();
                   dbConnection.Close();
    
               }
               catch (OleDbException ex)
               {
                   MessageBox.Show("Erro: " + ex.Message);
               }
    
           }
    
           private void dgwRegPortarias_DoubleClick(object sender, EventArgs e)
           {
               SelecionaDadosReferencia();
               JogaDadosGridNosCampos();
               gbInserirDados.Enabled = true;
               txtFinalizaRegistro.Text = "SIM";
               txtPortaria.Focus();
               btFinalizar.Enabled = true;
               btExcluir.Enabled = true;
               DesabilitaCamposNaoAlteraveis();
    
    
           }
    
           private void txtPortaria_KeyDown(object sender, KeyEventArgs e)
           {
               {
                   if (e.KeyCode == Keys.Enter)
                   {
                       this.SelectNextControl(this.ActiveControl, !e.Shift, true, true, true);
                   }
               }
           }
    
    
           private void SalvaAlteracao()
           {
               //Realiza alteração no banco de dados referente aos campos da informação do atestado de vaga
               //define conexão com provedor de dados:
               string strConnAltera = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\dbSigae.mdb;Persist Security Info=True;";
               // Define instrução SQL:
               string strSQLaltera = "UPDATE CadControlePortarias SET FinalizarRegistro='" + txtFinalizaRegistro.Text + "', Portaria='" + txtPortaria.Text + "', DiarioOficial='" + txtDiarioOficial.Text + "', DataDiarioOficial='" + txtDataDO.Text + "', Pagina='" + txtPg.Text + "'  WHERE ID = '" + txtID.Text + "'";
               //cria a conexão com DB:
               OleDbConnection dbConnAltera = new OleDbConnection(strConnAltera);
               //cria o comando que inicia a instrução SQL:
               OleDbCommand cmdAltera = new OleDbCommand(strSQLaltera, dbConnAltera);
    
               try
               {
                   //abre o banco de dados:
                   dbConnAltera.Open();
                   //executa a SQL:
                   cmdAltera.ExecuteNonQuery();
    
                   
               }
               catch (OleDbException ex)
               {
                   MessageBox.Show("Erro: " + ex.Message);
               }
               finally
               {
                   //fecha a conexão
                   dbConnAltera.Close();
               }
           }
    
           private void DesabilitaCamposNaoAlteraveis()
           {
               txtMes.Enabled = false;
               txtMatricula.Enabled = false;
               txtNome.Enabled = false;
               txtDescricao.Enabled = false;
               txtPeriodo.Enabled = false;
               txtGeraPortaria.Enabled = false;
           }
    
           private void HabilitaCamposNaoAlteraveis()
           {
               txtMes.Enabled = true;
               txtMatricula.Enabled = true;
               txtNome.Enabled = true;
               txtDescricao.Enabled = true;
               txtPeriodo.Enabled = true;
               txtGeraPortaria.Enabled = true;
           }
    
           
          
    
           private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
           //Ao selecionar o campo de filtro lança a rotina de filtragem de acordo com a seleção do combo
           {
               PreencheGridFiltrandoFolha();
           }
    
           private void txtFiltraMatricula_Validating(object sender, CancelEventArgs e)
           //Ao digitar a matrícula no campo de filtro e dar enter o mesmo lança a rotina de filtragem
           {
               PreencheGridFiltrandoMatricula();
           }
    
           private void btLimparFiltros_Click(object sender, EventArgs e)
           //Retorna o grid às condições originais
           {
               PreencheDGWdados();
           }
    
           private void button1_Click(object sender, EventArgs e)
           {
               TESTEFRM obj = new TESTEFRM();
               obj.Show();
           }
    
           private void cboAnoRelatorio_SelectedIndexChanged(object sender, EventArgs e)
           {
    
           }
    
           private void cboMesRelatorio_SelectedIndexChanged(object sender, EventArgs e)
           {
    
           }
    
        }
    }
    

    E aqui segue o código que consta no Form que carrega o relatório através do ReportViewer (a princípio está como Teste):

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace slçTransferindo
    {
        public partial class TESTEFRM : Form
        {
            public TESTEFRM()
            {
                InitializeComponent();
            }
    
            private void TESTEFRM_Load(object sender, EventArgs e)
            {
                // TODO: This line of code loads data into the 'dbSigaeDataSet.CadControlePortarias' table. You can move, or remove it, as needed.
                this.CadControlePortariasTableAdapter.GetDataParametroFolhaFill(this.dbSigaeDataSet.CadControlePortarias);
    
                this.reportViewer1.RefreshReport();
            }
        }
    }
    

    A princípio gera blza, só estou boiando no fazer ele filtrar o ano e o mês.

    Desde já grato!

    quarta-feira, 22 de janeiro de 2014 10:45
  • Olá,

    os valores nos combos estão fixos?

    Porque aqui você não conseguiu continuar?

    SELECT        ID, Ano, Mes, Portaria, DiarioOficial, DataDiarioOficial, Pagina, Matricula, Nome, Descricao, Periodo, GeraPortaria, FinalizarRegistro
    FROM            CadControlePortarias
    WHERE        Mes = 'cboTesteImpressao.[Text]' e Ano ??????

    era só concatenar, assim:

    SELECT        ID, Ano, Mes, Portaria, DiarioOficial, DataDiarioOficial, Pagina, Matricula, Nome, Descricao, Periodo, GeraPortaria, FinalizarRegistro
    FROM            CadControlePortarias
    WHERE Mes ='" + cboMes.Text + "' and ano='"+ cboAno.Text +"'"

    Uma dica: Não seria mais produtivo você deixar um campo date no banco e nos filtros do relatório você informar dataInicio e dataFim ?

    Qualquer dúvida posta ae.

    Att

    Wennder A. Santos

    Se foi útil, marque como útil. Se respondeu sua pergunta ou sanou sua dúvida, marque como resposta.



    quarta-feira, 22 de janeiro de 2014 11:04
  • Wennder,

    Tentei mas não filtra. Vou colocar alguns prints aqui pra ver se talvez vc identifica qual a besteira que eu estou fazendo:

    Se eu colocar o filtro como abaixo gera em branco:

     Agora se eu tiro a condição WHERE gera normalmente:

    O que será que não está pegando?

    Quanto a sua sugestão da data início/fim até já havia pensado nisso, porém como são dados que trabalhamos por folha de pagamento pensei que ficaria mais fácil colocar por mês, pois assim organizo: folha de março, folha de abril, etc... Mas vivendo e aprendendo... hehehe...

    quarta-feira, 22 de janeiro de 2014 11:42
  • Aparentemente está tudo certo, você já tentou executar essa sql pra ver se está retornando algo?

    pode ser que não esteja pegando o text do seu combo, é o mais provável, sendo assim a sql está fazendo a comparação com '' (nada) e não está encontrando registro.

    De uma verificada nisso.

    Wennder

    quarta-feira, 22 de janeiro de 2014 12:01
  • Aparentemente está tudo certo, você já tentou executar essa sql pra ver se está retornando algo?

    pode ser que não esteja pegando o text do seu combo, é o mais provável, sendo assim a sql está fazendo a comparação com '' (nada) e não está encontrando registro.

    De uma verificada nisso.

    Wennder

    Realmente o problema está "pegar o filtro", pois se retiro o campo e executo ele puxa os dados:

    E se deixar com os campos volta nada:

    O que será?

    quarta-feira, 22 de janeiro de 2014 12:26
  • Olá,

    pelo visto você está trabalhando errado com os parâmetros no Query builder, de uma olhada neste link, ele pode te ajudar:

    http://www.macoratti.net/07/10/aspn_rv2.htm

    Wennder


    quarta-feira, 22 de janeiro de 2014 12:50
  • Olá,

    pelo visto você está trabalhando errado com os parâmetros no Query builder, de uma olhada neste link, ele pode te ajudar:

    http://www.macoratti.net/07/10/aspn_rv2.htm

    Wennder


    Wennder,

    Tô quase desistindo... analisei o link que me passou e dei mais uma varrida no google, o grande problema é que basicamente todos passam exemplos em aspx, etc... Sei que a lógica é similar, porém quando a gente ainda é meio leigo em alguns pontos, chega em parte da explicação foge do código C# e aí embanana tudo.

    Acho que vou largar um tempo e deixar esfriar... quem sabe aparece uma luz com o tempo... hehehhe...

    Mas fico super agradecido por toda atenção dispendida... Vlw!

    quinta-feira, 23 de janeiro de 2014 00:46
  • Olá,

    você já fez o mais difícil, que foi encontrar o problema, agora é só resolver. O problema é só 1 e as soluções são infinitas, basta encontra a que melhor se ajusta ao seu contexto. 

    Como eu disse, você está passando os parâmetros de forma errada para o Query Builder, de uma pesquisada sobre esse assunto.

    Wennder

    quinta-feira, 23 de janeiro de 2014 12:38
  • Finalmente consegui encontrar a solução do problema. Vou registrar aqui para quem passar pela mesma situação.

    Bem, como meu banco de dados é access um dos primeiros problemas estava sendo a forma de declarar a variável na SQL. Quando o banco é access basta apenas colocar '?' como variável. Como já coloquei acima, precisaria colocar duas variáveis (uma para o ano e outra para o mês - visto que trabalharei com anos e meses diferenciados). Então como ficou minha SQL no meu TableAdapter:

    SELECT        ID, Ano, Mes, Portaria, DiarioOficial, DataDiarioOficial, Pagina, Matricula, Nome, Descricao, Periodo, GeraPortaria, FinalizarRegistro
    FROM            CadControlePortarias
    WHERE        (Ano = ?) AND (Mes = ?)

    Feito isso eu monto a planilha normalmente no report lançando os dois campos que receberão os parâmetros no form que contiver o ReportViewer:

    Depois chamo o comando do relatório pelo botão Gerar Relatório informando os campos como parâmetros no Fill do TableAdapter:

    private void btGerarImpressao_Click(object sender, EventArgs e)
            {
                if (txtAno.Text != "" && txtMes.Text != "")
                {
                    this.CadControlePortariasTableAdapter.Fill(this.DataSetRelPortarias.CadControlePortarias, txtAno.Text, txtMes.Text);
                    this.rptPortarias.RefreshReport();
                }
                else
                {
                    MessageBox.Show("É necessário selecionar os dois parâmetros para gerar o relatório", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information);
    
                }
            }

    Resultado:

    Pode ser simples, mas para minha pessoa que ainda não é profissional em informática foi sofrido. Segue aí para quem precisar.

    Agradeço pelas dicas acima do Wennder que foi me direcionando a conseguir. Vlw!

    • Sugerido como Resposta Wennder SantosMVP segunda-feira, 3 de fevereiro de 2014 00:22
    domingo, 2 de fevereiro de 2014 12:09
  • mesmo apos tanto tempo me ajudou muito cara muito obrigado 
    segunda-feira, 16 de setembro de 2019 17:20