none
Dificuldade em passar um parâmetro para um rdlc que tenho(Oracle) RRS feed

  • Pergunta

  • Não estou conseguindo passar uma parâmetro para o meu relatório. Tenho um campo chamado de Regulamentado, referente ao campo Ind_Regulamentado. veja o código abaixo e como eu faço esse filtro?

    public static void Emitir()
            {           
                //Relatório com DataSource = ORACLE
                dsPlanoMedico.PLANO_MEDICODataTable dtPlanoMedico = new dsPlanoMedico.PLANO_MEDICODataTable();
                dsPlanoMedicoTableAdapters.PLANO_MEDICOTableAdapter adapt = new dsPlanoMedicoTableAdapters.PLANO_MEDICOTableAdapter();
    
                adapt.Fill(dtPlanoMedico);
                dtPlanoMedico.Where(i => i.IND_REGULAMENTADO == "S");//aqui não funciona
    
                ReportDataSource rds = new ReportDataSource("dsDados", dtPlanoMedico.DefaultView);
                ReportViewer viewer = new ReportViewer();
    
                viewer.ProcessingMode = ProcessingMode.Local;
                viewer.LocalReport.ReportPath = "ReportBD.rdlc";
                //viewer.LocalReport.SetParameters(new ReportParameter("Regulamentado", "S"));
                viewer.LocalReport.DataSources.Add(rds);
    
                Warning[] warnings;
                string[] streamIds;
                string mimeType = string.Empty;
                string encoding = string.Empty;
                string extension = string.Empty;
    
                byte[] bytesPDF = viewer.LocalReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamIds, out warnings);
                FileStream fsPDF = new FileStream("c:\\temp\\report.pdf", FileMode.Create);
                fsPDF.Write(bytesPDF, 0, bytesPDF.Length);
                fsPDF.Close();
                fsPDF.Dispose();
    
                byte[] bytesExcel = viewer.LocalReport.Render("Excel", null, out mimeType, out encoding, out extension, out streamIds, out warnings);
                FileStream fsExcel = new FileStream("c:\\temp\\report.xls", FileMode.Create);
                fsExcel.Write(bytesExcel, 0, bytesExcel.Length);
                fsExcel.Close();
                fsExcel.Dispose();
    
                byte[] bytesWord = viewer.LocalReport.Render("Word", null, out mimeType, out encoding, out extension, out streamIds, out warnings);
                FileStream fsWord = new FileStream("c:\\temp\\report.doc", FileMode.Create);
                fsWord.Write(bytesWord, 0, bytesWord.Length);
                fsWord.Close();
                fsWord.Dispose();
    
    
            }
    quarta-feira, 4 de novembro de 2015 13:16

Respostas

  • Olá pnet!

    Você pode utilizar uma cláusula "AND" (ou "OR", dependendo do que você quer fazer).. Por exemplo:

    dv.RowFilter = "IND_REGULAMENTADO LIKE 'N' AND TIPO_REGISTRO_ANS LIKE 'D'"; 

    Já quanto à sua dúvida anterior (do erro que você está recebendo sobre COD_PLANO), está vindo de dentro do relatório.. Aparentemente você tem uma expressão em um TextBox utilizando o campo COD_PLANO e ele não está disponível no local onde o TextBox está localizado..


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima

    • Marcado como Resposta pnet quarta-feira, 4 de novembro de 2015 18:35
    quarta-feira, 4 de novembro de 2015 18:29
    Moderador

Todas as Respostas

  • Faz assim para ver se dá certo.

    cria uma variavel string sim = "S"; e muda tua consulta dtPlanoMedico.Where(i => i.IND_REGULAMENTO == SIM);


    Junior

    quarta-feira, 4 de novembro de 2015 14:03
  • Não estou conseguindo passar uma parâmetro para o meu relatório. Tenho um campo chamado de Regulamentado, referente ao campo Ind_Regulamentado. veja o código abaixo e como eu faço esse filtro?

    public static void Emitir()
            {           
                //Relatório com DataSource = ORACLE
                dsPlanoMedico.PLANO_MEDICODataTable dtPlanoMedico = new dsPlanoMedico.PLANO_MEDICODataTable();
                dsPlanoMedicoTableAdapters.PLANO_MEDICOTableAdapter adapt = new dsPlanoMedicoTableAdapters.PLANO_MEDICOTableAdapter();
    
                adapt.Fill(dtPlanoMedico);
                dtPlanoMedico.Where(i => i.IND_REGULAMENTADO == "S");//aqui não funciona
    
                ReportDataSource rds = new ReportDataSource("dsDados", dtPlanoMedico.DefaultView);
                ReportViewer viewer = new ReportViewer();
    
                viewer.ProcessingMode = ProcessingMode.Local;
                viewer.LocalReport.ReportPath = "ReportBD.rdlc";
                //viewer.LocalReport.SetParameters(new ReportParameter("Regulamentado", "S"));
                viewer.LocalReport.DataSources.Add(rds);
    
                Warning[] warnings;
                string[] streamIds;
                string mimeType = string.Empty;
                string encoding = string.Empty;
                string extension = string.Empty;
    
                byte[] bytesPDF = viewer.LocalReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamIds, out warnings);
                FileStream fsPDF = new FileStream("c:\\temp\\report.pdf", FileMode.Create);
                fsPDF.Write(bytesPDF, 0, bytesPDF.Length);
                fsPDF.Close();
                fsPDF.Dispose();
    
                byte[] bytesExcel = viewer.LocalReport.Render("Excel", null, out mimeType, out encoding, out extension, out streamIds, out warnings);
                FileStream fsExcel = new FileStream("c:\\temp\\report.xls", FileMode.Create);
                fsExcel.Write(bytesExcel, 0, bytesExcel.Length);
                fsExcel.Close();
                fsExcel.Dispose();
    
                byte[] bytesWord = viewer.LocalReport.Render("Word", null, out mimeType, out encoding, out extension, out streamIds, out warnings);
                FileStream fsWord = new FileStream("c:\\temp\\report.doc", FileMode.Create);
                fsWord.Write(bytesWord, 0, bytesWord.Length);
                fsWord.Close();
                fsWord.Dispose();
    
    
            }
    quarta-feira, 4 de novembro de 2015 15:11
  • Olá pnet!

    Seguinte.. Na minha opiniao, você tem duas opcoes.. A primeira delas, é passar um parâmetro para o seu relatório (como você tentou fazer) e aí, baseado nesse parâmetro, você adiciona um filtro no seu Tablix utilizando o seu valor..

    Outra opcao é criar um DataView com os valores filtrados e passar esse DataView para o seu relatório.. Seria algo como:

    adapt.Fill(dtPlanoMedico);
    var dv = new System.Data.DataView(dtPlanoMedico);
    dv.RowFilter = "IND_REGULAMENTADO LIKE 'S'";
    
    ReportDataSource rds = new ReportDataSource("dsDados", dv);
    ReportViewer viewer = new ReportViewer();
    
    viewer.ProcessingMode = ProcessingMode.Local;
    viewer.LocalReport.ReportPath = "ReportBD.rdlc";
    viewer.LocalReport.DataSources.Add(rds);

    A propósito, se você se interessar por outros artigos sobre Report Viewer, confira este link:

    http://www.andrealveslima.com.br/blog/index.php/category/report-viewer/


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima

    • Marcado como Resposta pnet quarta-feira, 4 de novembro de 2015 17:39
    • Não Marcado como Resposta pnet quarta-feira, 4 de novembro de 2015 18:10
    quarta-feira, 4 de novembro de 2015 15:35
    Moderador
  • Começou agora a me dar esse erro:

    The Value expression for the text box ‘COD_PLANO’ refers to the field ‘COD_PLANO’.  
    Report item expressions can only refer to fields within the current dataset scope or, 
    if inside an aggregate, the specified dataset scope. Letters in the names of fields must use the correct case.
    C:\Projetos\Servicos\ReportBD.rdlc Servicos

    Como eu resolvo isso?

    quarta-feira, 4 de novembro de 2015 17:18
  • Uma pergunta, eu consigo passar mais de uma parâmetro à variável dv?

    Fiz esse filtro e filtrou: dv.RowFilter = "IND_REGULAMENTADO LIKE 'N'";, porem se eu faço dessa forma:

    dv.RowFilter = "IND_REGULAMENTADO LIKE 'N'"; 
    dv.RowFilter = "TIPO_REGISTRO_ANS LIKE 'D'"; 
    aí só filtra pelo último e não ambos. Como eu resolvo isso?

    • Editado pnet quarta-feira, 4 de novembro de 2015 18:10
    quarta-feira, 4 de novembro de 2015 17:45
  • Olá pnet!

    Você pode utilizar uma cláusula "AND" (ou "OR", dependendo do que você quer fazer).. Por exemplo:

    dv.RowFilter = "IND_REGULAMENTADO LIKE 'N' AND TIPO_REGISTRO_ANS LIKE 'D'"; 

    Já quanto à sua dúvida anterior (do erro que você está recebendo sobre COD_PLANO), está vindo de dentro do relatório.. Aparentemente você tem uma expressão em um TextBox utilizando o campo COD_PLANO e ele não está disponível no local onde o TextBox está localizado..


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima

    • Marcado como Resposta pnet quarta-feira, 4 de novembro de 2015 18:35
    quarta-feira, 4 de novembro de 2015 18:29
    Moderador
  • Eu já havia feito, mas vou marcar a sua resposta, que quando eu vim postar a resposta, a sua resposta já estava postada. valeu.
    quarta-feira, 4 de novembro de 2015 18:35