C# 无参数处理Crystal报告
我目前正在运行一个Windows服务,可以按计划将Crystal报表导出为PDF。在运行的66个报告中,大约有5个没有定义参数 通过使用Crystal Reports DLL,我了解到ReportDocument.Export()方法需要参数,因为我在遇到ReportDocument.Export()方法时遇到了“缺少参数值”异常 我目前正在使用此方法设置参数:C# 无参数处理Crystal报告,c#,windows,crystal-reports,visual-studio-2015,C#,Windows,Crystal Reports,Visual Studio 2015,我目前正在运行一个Windows服务,可以按计划将Crystal报表导出为PDF。在运行的66个报告中,大约有5个没有定义参数 通过使用Crystal Reports DLL,我了解到ReportDocument.Export()方法需要参数,因为我在遇到ReportDocument.Export()方法时遇到了“缺少参数值”异常 我目前正在使用此方法设置参数: private void SetParameters(string rawParameters = null) {
private void SetParameters(string rawParameters = null)
{
var crystalParameters = new Dictionary<string, object>();
var parameters = String.IsNullOrEmpty(rawParameters) ? null : HttpUtility.ParseQueryString(rawParameters);
if(parameters != null)
{
foreach (string rawKey in parameters.AllKeys)
{
var value = parameters[rawKey];
// Check for array value (e.g. key[0]=value)
var arrayCheck = Regex.Match(rawKey, @"^(.+)\[[0-9]?\]$");
if (arrayCheck.Success)
{
var key = arrayCheck.Groups[1].Value;
// Existing entry for this key, reconstruct object array with this added
if (crystalParameters.ContainsKey(key))
{
var newParameterArray = new object[((object[])crystalParameters[key]).Count() + 1];
int i = 0;
foreach (object item in (object[])crystalParameters[key])
{
newParameterArray[i++] = item;
}
newParameterArray[i++] = (object)value;
crystalParameters[key] = (object)newParameterArray;
}
// New array value
else
crystalParameters[key] = (object)new object[] { value };
}
// Discrete value
else
crystalParameters[rawKey] = (object)parameters[rawKey];
}
foreach (string parameter in crystalParameters.Keys)
{
try
{
this.reportDocument.SetParameterValue(parameter, crystalParameters[parameter]);
}
catch (Exception ex)
{
// Ignore invalid parameter exceptions, otherwise throw again
if (ex.HResult != -2147352565)
{
throw ex;
}
}
}
}
}
private void SetParameters(字符串参数=null)
{
var crystalParameters=新字典();
var parameters=String.IsNullOrEmpty(rawParameters)?null:HttpUtility.ParseQueryString(rawParameters);
if(参数!=null)
{
foreach(parameters.AllKeys中的字符串rawKey)
{
var值=参数[rawKey];
//检查数组值(例如键[0]=值)
var arrayCheck=Regex.Match(rawKey,@“^(+)\[[0-9]?\]$”;
if(arrayCheck.Success)
{
var key=arrayCheck.Groups[1]。值;
//此键的现有项,使用添加的
if(crystalParameters.ContainsKey(键))
{
var newParameterArray=新对象[((对象[])晶体参数[key]).Count()+1];
int i=0;
foreach(对象[])crystalParameters[key]中的对象项)
{
newParameterArray[i++]=项;
}
newParameterArray[i++]=(对象)值;
crystalParameters[key]=(对象)新参数数组;
}
//新数组值
其他的
crystalParameters[key]=(对象)新对象[]{value};
}
//离散值
其他的
crystalParameters[rawKey]=(对象)参数[rawKey];
}
foreach(crystalParameters.Keys中的字符串参数)
{
尝试
{
this.reportDocument.SetParameterValue(参数,crystalParameters[parameter]);
}
捕获(例外情况除外)
{
//忽略无效的参数异常,否则将再次抛出
如果(例如HResult!=-2147352565)
{
掷骰子;
}
}
}
}
}
我测试了几个场景,包括ReportDocument.SetParameterValue(“,”)
。然而,我解决这个问题的时候,也只有当我删除了这个if条款;将此方法保留为仅在报表没有参数时调用