string[] fieldArray;
            ParameterFields pfs = new ParameterFields();
            fieldArray = DynamicPrint.fieldStr.Split(',');
            SqlConnection con = DBT.CreateConnection();
            con.Open();
            SqlDataAdapter sda = new SqlDataAdapter("select " + DynamicPrint.fieldStr + " from _Test", con);
            DataSet ds = new DataSet();
            sda.Fill(ds, "_Test");
            CrystalReport3 cr = new CrystalReport3();
            for (int i = 0; i < fieldArray.Length; i++)
            {
                ParameterField pf = new ParameterField();
                pf.Name = "t" + Convert.ToString(i + 1);
                ParameterDiscreteValue pdv = new ParameterDiscreteValue();
                pdv.Value = fieldArray[i];
                pf.CurrentValues.Add(pdv); 
                pfs.Add(pf);
                string myStr = "";
                myStr = "tt" + Convert.ToString(i + 1); 
                cr.DataDefinition.FormulaFields[myStr].Text = "{_Test." + fieldArray[i] + "}";            }
            crystalReportViewer1.ParameterFieldInfo = pfs;
            cr.SetDataSource(ds.Tables["_Test"]);
            crystalReportViewer1.ReportSource = cr;

解决方案 »

  1.   

    如下代码是正确的代码,这里使用的是调用rpt文件,rpt连接sp,传递parameters,就可以了。
                this.reportDocument1.FileName = frmMain.getAppPath() + "\\report\\SalesQuotation.rpt";            ParameterField paramPrinter = new ParameterField();
                paramPrinter.ParameterFieldName = "@specnum            ParameterDiscreteValue paramValue = new ParameterDiscreteValue();
                paramValue.Value = "QI-800-L-A0002"; //this.specnum;
                paramPrinter.CurrentValues.Add(paramValue);
                ParameterFields ParamFields = new ParameterFields();
                ParamFields.Add(paramPrinter);
                crystalReportViewer1.ParameterFieldInfo = ParamFields;            this.crystalReportViewer1.ReportSource = reportDocument1;
                this.crystalReportViewer1.Show();