Usuário com melhor resposta
Dificuldade em passar um parâmetro para um rdlc que tenho(Oracle)

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(); }
- Movido AndreAlvesLimaModerator quarta-feira, 4 de novembro de 2015 14:42
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
Todas as Respostas
-
-
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(); }
- Mesclado AndreAlvesLimaModerator quarta-feira, 4 de novembro de 2015 16:03 duplicado
-
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 -
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 ServicosComo eu resolvo isso?
-
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
-
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
-