2012-11-02 4 views
0

두 개의 매개 변수 인 ponumber와 receiptno가있는 보고서가 있습니다. 매개 변수 값이 URL을 통해 전달되는 C# 페이지에서 보고서를 호출하려고합니다. 보고서를 호출 할 때 "매개 변수가 틀립니다"라는 오류가 발생하지만 이유를 알 수 없습니다. 처음에는 보고서 뷰어에 매개 변수가 없다고했기 때문에 온라인에서 찾은 내용을 토대로 다양한 코드 변경 작업을 수행했습니다. 따라서이 방법은 인 것 같습니다. 그러나 더 좋은 결과는이지만 작동하지 않습니다.Crystal 보고서 매개 변수가 잘못되었습니다. C#

내 코드 :

string ponumber = Request.QueryString["ponumber"].ToString(); 
string receiptno = Request.QueryString["receiptno"].ToString(); 

    // Put Away Report 


    CrystalReportSource CrystalReportSource1 = new CrystalReportSource(); 
    CrystalReportViewer CrystalReportViewer1 = new CrystalReportViewer(); 



    ParameterFields paramFields1 = new ParameterFields(); 
    ParameterFields paramFields2 = new ParameterFields(); 
    ParameterField paramField1 = new ParameterField(); 
    ParameterField paramField2 = new ParameterField(); 
    ParameterDiscreteValue paramDiscreteValue1 = new ParameterDiscreteValue(); 
    ParameterDiscreteValue paramDiscreteValue2 = new ParameterDiscreteValue(); 

    paramField1.Name = "@ponumber"; 
    paramDiscreteValue1.Value = ponumber; 
    paramField1.CurrentValues.Add(paramDiscreteValue1); 
    paramField1.HasCurrentValue = true; 
    paramFields1.Add(paramField1); 

    paramField2.Name = "@receiptno"; 
    paramDiscreteValue2 = new ParameterDiscreteValue(); // <-- This line is added 
    paramDiscreteValue2.Value = receiptno; 
    paramField2.CurrentValues.Add(paramDiscreteValue2); 
    paramField2.HasCurrentValue = true; 
    paramFields2.Add(paramField2); 

    CrystalReportViewer1.ParameterFieldInfo = paramFields1; 
    CrystalReportViewer1.ParameterFieldInfo = paramFields2; 

    TableLogOnInfo logOnInfo = new TableLogOnInfo(); 

    logOnInfo.ConnectionInfo.ServerName = ConfigurationManager.AppSettings["WarehouseReportServerName"]; 
    logOnInfo.ConnectionInfo.DatabaseName = ConfigurationManager.AppSettings["WarehouseReportDatabaseName"]; 
    logOnInfo.ConnectionInfo.UserID = ConfigurationManager.AppSettings["WarehouseReportUserID"]; 
    logOnInfo.ConnectionInfo.Password = ConfigurationManager.AppSettings["WarehouseReportPassword"]; 

    TableLogOnInfos infos = new TableLogOnInfos(); 
    infos.Add(logOnInfo); 
    CrystalReportViewer1.LogOnInfo = infos; 

    maindiv.Controls.Add(CrystalReportSource1); 
    maindiv.Controls.Add(CrystalReportViewer1); 
    CrystalReportViewer1.ReportSource = CrystalReportSource1; 
    CrystalReportViewer1.EnableParameterPrompt = false; 
    CrystalReportSource1.Report.FileName = "Report3.rpt"; 
    CrystalReportSource1.EnableCaching = false; 
    CrystalReportViewer1.DataBind(); 

답변

0

나는 고비을 통해 저를 얻었다 SO에 다른 대답을 발견했다. I 함께 코드의 13 개 라인을 대체 :

CrystalReportSource1.ReportDocument.SetParameterValue(0, ponumber); 
CrystalReportSource1.ReportDocument.SetParameterValue(1, receiptno); 

Passing Values to a Crystal Report

소스 매개 변수 값을 설정하는 다른 방법을 가지고 같은 수동 수집을 구축하는 대신,이 보인다. 나는 나의 첫 번째 시도가 비행 중에 매개 변수를 만드는 것이라고 생각한다.

1

내가 크리스탈 리포트에 익숙하지 않은,하지만 몇 가지, 즉 여기, 나를 뛰어 :

CrystalReportViewer1.ParameterFieldInfo = paramFields1; 
    CrystalReportViewer1.ParameterFieldInfo = paramFields2; 

당신은 두 번째에 ParameterFieldInfo 수집을 덮어 쓰는 너무 효과적으로 paramFields1가 보고서로 전송되지 않습니다. 대신, 당신은 을 컬렉션에 추가하고 싶다고 생각합니다. 나는이 작업을 수행하는 코드를 수정 (그리고 불필요한 선을 제거) 한 :

string ponumber = Request.QueryString["ponumber"].ToString(); 
    string receiptno = Request.QueryString["receiptno"].ToString(); 

    // Put Away Report 

    CrystalReportSource CrystalReportSource1 = new CrystalReportSource(); 
    CrystalReportViewer CrystalReportViewer1 = new CrystalReportViewer(); 

    ParameterField paramField1 = new ParameterField(); 
    ParameterField paramField2 = new ParameterField(); 
    ParameterDiscreteValue paramDiscreteValue1 = new ParameterDiscreteValue(); 
    ParameterDiscreteValue paramDiscreteValue2 = new ParameterDiscreteValue(); 

    paramField1.Name = "@ponumber"; 
    paramDiscreteValue1.Value = ponumber; 
    paramField1.CurrentValues.Add(paramDiscreteValue1); 
    paramField1.HasCurrentValue = true; 

    paramField2.Name = "@receiptno"; 
    paramDiscreteValue2.Value = receiptno; 
    paramField2.CurrentValues.Add(paramDiscreteValue2); 
    paramField2.HasCurrentValue = true; 

    CrystalReportViewer1.ParameterFieldInfo.Add(paramField1); 
    CrystalReportViewer1.ParameterFieldInfo.Add(paramField2); 

    TableLogOnInfo logOnInfo = new TableLogOnInfo(); 

    logOnInfo.ConnectionInfo.ServerName = ConfigurationManager.AppSettings["WarehouseReportServerName"]; 
    logOnInfo.ConnectionInfo.DatabaseName = ConfigurationManager.AppSettings["WarehouseReportDatabaseName"]; 
    logOnInfo.ConnectionInfo.UserID = ConfigurationManager.AppSettings["WarehouseReportUserID"]; 
    logOnInfo.ConnectionInfo.Password = ConfigurationManager.AppSettings["WarehouseReportPassword"]; 

    TableLogOnInfos infos = new TableLogOnInfos(); 
    infos.Add(logOnInfo); 
    CrystalReportViewer1.LogOnInfo = infos; 

    maindiv.Controls.Add(CrystalReportSource1); 
    maindiv.Controls.Add(CrystalReportViewer1); 
    CrystalReportViewer1.ReportSource = CrystalReportSource1; 
    CrystalReportViewer1.EnableParameterPrompt = false; 
    CrystalReportSource1.Report.FileName = "Report3.rpt"; 
    CrystalReportSource1.EnableCaching = false; 
    CrystalReportViewer1.DataBind(); 
+0

감사합니다. @ 매끄러운 피트. 나는 그것이 한 번에 그것을 바꿨다고 믿는다. 내가 바꾼 것처럼 크리스탈은 그 매개 변수를 좋아하지 않습니다. 나는 보고서 매개 변수가 문자열처럼 설정되어 있지만 매개 변수가 숫자처럼 보내지는 것을 확인했습니다. 빨간 청어가 될지도 모르지만, 내가 다음에 조사 할 것이 있습니다. 이것은 * 단순해야합니다 * – Andrew