2009-10-19 2 views
7

Я пытался заставить это работать некоторое время, и весь код примера, который я видел, не совсем делает то, что я делаю.Передача параметров в отчеты о кристаллах в C#

У меня есть программа, которая возвращает PDF-отчет, в который я передаю таблицу данных. Это отлично работает, за исключением того, что я хотел бы передать ему несколько других параметров (диапазон дат таблицы, статистика и т. Д.), И я просто не могу заставить ее работать. Мой код в основном выглядит так.

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; 

Я добавил поле параметра в документе RPT в кристалле, я должен изменить что-либо в файле XSD в C#, или я упускаю что-то совершенно другое?

Большое спасибо, Энди.

ответ

22

Все, что код параметра может быть заменен ...

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

Я не могу вспомнить, если порядок имеет значение при настройке источника данных и параметров. Возможно, сначала попробуйте установить источник данных. Источник xsd/datasource не имеет отношения к параметрам кристалла.

Update1

SetParameterValue ПОСЛЕ asignation источника данных или вы получите ошибку "Missing значения параметров."

+1

Да что это было! Думаю, я пробовал эту линию раньше, но у меня был источник данных, который был установлен в неправильном месте, как вы указали. Работает сейчас, спасибо! – 2009-10-19 16:30:55

+0

@Andrew. Не могли бы вы рассказать мне, где вы поместили звонок в dataSource? – Unlimited071

+2

Положите SetParameterValue ПОСЛЕ присвоения источника данных – 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

Пожалуйста, объясните, что вы исправили или предлагаете. Просто добавление кода не очень полезно. – Priyesh

Смежные вопросы