2009-10-19 11 views
7

Próbowałem uruchomić to na chwilę, a cały przykładowy kod, który widziałem, nie całkiem robi to, co robię.Przekazywanie parametrów do raportów kryształów w C#

Mam program, który zwraca pdf raportu, do którego przekazuję tabelę danych. Działa to dobrze, z wyjątkiem tego, że chciałbym przekazać mu kilka innych parametrów (zakres dat tabeli, statystyki itp.) I po prostu nie mogę go uruchomić. Mój kod zasadniczo wygląda tak.

ReportDocument myDataReport = new CrystalDecisions.CrystalReports.Engine.ReportDocument(); 
myDataReport.Load(@"C:\Layouts\Report.rpt"); 
ParameterField myParam = new ParameterField(); 
ParameterDiscreteValue myDiscreteValue = new ParameterDiscreteValue(); 
myParam.ParameterFieldName = "MyParameter"; 
myDiscreteValue.Value = "Hello"; 
myParam.CurrentValues.Add(myDiscreteValue); 
myDataReport.ParameterFields.Add(myParam); 
myDataReport.SetDataSource(myDataTable); 
Stream returnData = myDataReport.ExportToStream(PortableDocFormat); 
myDataReport.Close(); 
return returnData; 

Dodałem pole parametru w dokumencie rpt w krysztale, muszę zmienić coś w pliku XSD w C#, czy jestem brakuje czegoś zupełnie innego?

Wielkie dzięki, Andy.

Odpowiedz

22

Wszystko to kod parametru można zastąpić ...

// Set datasource first 
myDataReport.SetDataSource(...) 
// Assign Paramters after set datasource 
myDataReport.SetParameterValue("MyParameter", "Hello"); 

nie mogę sobie przypomnieć, czy sprawy rzędu podczas ustawiania źródła danych i parametrów. Może spróbuj najpierw ustawić źródło danych. Źródło danych xsd/datas nie ma związku z parametrami kryształów.

UPDATE1

SetParameterValue PO asignation źródła danych albo będziesz otrzymywać błąd "Brakujące wartości parametrów."

+1

Tak to było to! Wydaje mi się, że wcześniej wypróbowałem tę linię, ale miałem ustawione źródło danych w niewłaściwym miejscu, jak zauważyłeś. Działa teraz, dzięki! –

+0

@Andrew. Czy możesz mi powiedzieć, gdzie zadzwoniłeś do źródła danych? – Unlimited071

+2

Umieść wartość SetParameter PO odwzorowaniu źródła danych – Apocatastasis

3
ReportDocument cryRpt = new ReportDocument(); 

TableLogOnInfos crtableLogoninfos = new TableLogOnInfos(); 
TableLogOnInfo crtableLogoninfo = new TableLogOnInfo(); 
ConnectionInfo crConnectionInfo = new ConnectionInfo(); 
Tables CrTables; 

string path = "C:/reportpath/report.rpt"; 
cryRpt.Load(path); 

cryRpt.SetParameterValue("MyDate2", str2); 
cryRpt.SetParameterValue("MyDate", str1); 

crConnectionInfo.ServerName = "server"; 
crConnectionInfo.DatabaseName = "DataBase"; 
crConnectionInfo.UserID = "user"; 
crConnectionInfo.Password = "password"; 

CrTables = cryRpt.Database.Tables; 
foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables) 
{ 
    crtableLogoninfo = CrTable.LogOnInfo; 
    crtableLogoninfo.ConnectionInfo = crConnectionInfo; 
    CrTable.ApplyLogOnInfo(crtableLogoninfo); 
} 

crystalReportViewer1.ReportSource = cryRpt; 
crystalReportViewer1.Refresh(); 
1
 //create object of crystal report. 
     CrystalReport1 objRpt = new CrystalReport1(); 
     objRpt.SetDataSource(ds); 
     ParameterFields pfield = new ParameterFields(); 
     ParameterField ptitle = new ParameterField(); 
     ParameterDiscreteValue pvalue = new ParameterDiscreteValue(); 
     ptitle.ParameterFieldName = "date"; 
     pvalue.Value = txtcolor.Text; 
     ptitle.CurrentValues.Add(pvalue); 
     pfield.Add(ptitle); 
     crystalReportViewer1.ParameterFieldInfo = pfield; 
     crystalReportViewer1.ReportSource = objRpt; 
     crystalReportViewer1.Refresh(); 
+2

Proszę wyjaśnij, co naprawiłeś lub sugerujesz. Dodanie kodu nie jest zbyt pomocne. – Priyesh

Powiązane problemy