8
votes

Passer des paramètres aux rapports en cristal en C #

J'ai essayé de faire fonctionner cela pendant un moment et que tout le code que j'ai vu que j'ai vu ne fait pas tout à fait ce que je fais.

J'ai un programme qui retourne un PDF d'un signaler que je passe une table de données à. Cela fonctionne bien, sauf que je voudrais transmettre quelques autres paramètres (la plage de date de la table, des statistiques, etc.) et je ne peux tout simplement pas le faire fonctionner. Mon code ressemble fondamentalement à ceci. P>

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;


0 commentaires

5 Réponses :


36
votes

Tout ce code de paramètre peut être remplacé par ...

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


3 commentaires

Oui c'était ça! Je pense que j'ai essayé cette ligne auparavant, mais j'ai eu la source de données au mauvais endroit que vous l'avez souligné. Travaille comme étant maintenant, merci!


@Andrew. Pourriez-vous s'il vous plaît dites-moi où avez-vous mis l'appel à la source de données?


Mettez SetParameValue après l'asignation de la DataSource



4
votes
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(); 

0 commentaires

1
votes
       //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();

1 commentaires

Veuillez expliquer ce que vous avez fixé ou suggère. Il suffit d'ajouter du code n'est pas très utile.



0
votes
                rptTeacherTimeTable ttReport = new rptTeacherTimeTable();
                DataTable dt = new DataTable();
                dt = ObjclsT_TimeTable.GetTimeTableByClass(ClassID);

                objReport = ttReport;
                objReport.SetDataSource(dt);
                objReport.SetParameterValue("RTitle", "Class Time Table");
                objReport.SetParameterValue("STitle", "Teacher Time Table");
                reportViewer.crystalReportViewer1.ReportSource = objReport;
                reportViewer.crystalReportViewer1.Show();
                reportViewer.Show();

1 commentaires

S'il vous plaît, expliquez!



0
votes

Il suffit de faire une seule chose et votre code s'exécutera automatiquement définir la source de données avant d'ajouter des paramètres ...

 crp rpt = new crp();
 rpt.SetDataSource(dt);
 rpt.SetParameterValue("p",p.ToString());


0 commentaires