我是用vs2008开发的winform程序,内容的大概做法用根据阿泰的http://www.cnblogs.com/babyt/articles/142309.html
文章进行操作的,不同的在于我这个程序是C#语言。但是在运行弹出界面时会抱一个错,说参数不正确,但是在调试时每个字段都赋上值了,而且参数字段名也和报表页面的一致,可是它就是在弹出界面时报’参数不正确‘的错!希望大家帮帮忙,我很着急的,谢谢了!

解决方案 »

  1.   

    是啊,我一步一步调试的
     public void OPen_Reports(string[] fieldArray,DataTable mydt,int k)
            {
                //参数字段集合
                ParameterFields paramFields = new ParameterFields();
                //参数字段
                ParameterField paramField = null;
                //离散值
                ParameterDiscreteValue discreteVal = null;            for (int i = 0; i < fieldArray.Length; i++)
                {
                    //设置第一个离散值并将其传递给该参数
                    //传递参数做为表头 
                    //--------------------------------------
                    //参数设置部分
                    paramField = new ParameterField();
                    paramField.ParameterFieldName = "myParaField" + (i + 1).ToString();
                    //离散值
                    discreteVal = new ParameterDiscreteValue();
                    string aa = fieldArray[i].Substring(fieldArray[i].LastIndexOf("as") + 3, fieldArray[i].Length - fieldArray[i].LastIndexOf("as") - 3);
                    discreteVal.Value = fieldArray[i].Substring(fieldArray[i].LastIndexOf("as") + 3, fieldArray[i].Length - fieldArray[i].LastIndexOf("as") - 3);
                    //赋值
                    paramField.CurrentValues.Add(discreteVal);
                    //将该字段加如到字段集合中
                    paramFields.Add(paramField);
                    //不允许该字段弹出提示
                    paramField.AllowCustomValues =false;                string a = fieldArray[i].ToString();
                    string b = fieldArray[i].LastIndexOf("as").ToString();
                    string d = fieldArray[i].Length.ToString();
                    string c = (fieldArray[i].Length - fieldArray[i].LastIndexOf("as") - 3).ToString();
                    string e = "{mydt." + fieldArray[i].Substring(fieldArray[i].LastIndexOf("as") + 3, fieldArray[i].Length - fieldArray[i].LastIndexOf("as") - 3) + "}";
                    string f = "myField" + (i + 1).ToString();
                    crTCZLSDTaoJu.OpenSubreport("TCZLSDTaoJu_FuZhu_DaoCha").DataDefinition.FormulaFields["myField" + (i + 1).ToString()].Text = "{mydt." + fieldArray[i].Substring(fieldArray[i].LastIndexOf("as") + 3, fieldArray[i].Length - fieldArray[i].LastIndexOf("as") - 3) + "}";
                }
             //设置剩余的未使用到的参数,防止出现提示
             //具体操作同上,只是给一个空值
                for (int j = fieldArray.Length; j <= k;j++ )
                {
                    //   //设置第一个离散值并将其传递给该参数
                    //   //传递参数做为表头
                       paramField = new ParameterField();
                       paramField.ParameterFieldName = "myParaField" + (j).ToString();
                       paramFields.Add(paramField);
                       discreteVal = new ParameterDiscreteValue();
                       discreteVal.Value = "";
                       paramField.CurrentValues.Add(discreteVal);
                       paramFields.Add(paramField);
                }
                //   将参数字段集合放入查看器控件
                crystalReportViewer1.ParameterFieldInfo = paramFields;
            }
    这是那段代码