Crystal Reports无效参数索引?

时间:2016-03-04 09:40:02

标签: c# visual-studio crystal-reports comexception

我正在使用VB2010 C#和CR13。我创建了一个带有空参数字段的报表,我将在运行时使用用户将在多个文本框中输入的文本填充该报表。我创建了一个字典,其中包含参数名称作为键,文本作为值。

Dictionary<String, String> textos = new Dictionary<string, string>();
textos.Add("prueba1", textBox1.Text);
textos.Add("prueba2", textBox2.Text);
textos.Add("prueba3", textBox3.Text);
textos.Add("prueba4", textBox4.Text);
textos.Add("prueba5", textBox5.Text);
textos.Add("prueba6", textBox6.Text);
textos.Add("prueba7", textBox7.Text);
textos.Add("prueba8", textBox8.Text);

然后我使用以下内容将值添加到报告中:

    public void addValues()
    {
        String text;
        String parameter;

        foreach (KeyValuePair<String, String> t in textos)
        {
            text = t.Value;
            parameter = t.Key;

            if (!String.IsNullOrEmpty(text))
                cryRpt.SetParameterValue(parameter, text);
        }
    }

cryRpt.SetParameterValue(parameter, text);给了我一个 COMException(HRESULT:0x8002000B(DISP_E_BADINDEX)),我知道这意味着我引入的参数名称与参数不同报告中的名称。问题是 IS 相同,因为我已经复制并粘贴它以确保。

经过进一步测试后,我发现如果我将 prueba1 的参数名称改为 prueba ,它就可以了。所以我认为发生这种情况是因为参数字段的名称上没有数字,所以我更改了所有名称(例如代替 prueba2 test )这再次给了我与之前相同的无效索引例外。

发生了什么事?

修改

经过大量测试后,我意识到我做得很好,问题在于参数字段。我没有创建各种参数字段,而是每次使用相同的参数字段。对不起,非常感谢大家。

1 个答案:

答案 0 :(得分:0)

尝试这种方式:

List<string> s = new List<string>();
foreach (KeyValuePair<String, String> t in textos)
{
    text = t.Value;
    s.Add(text);
}

然后在这样的新循环中:

for (int i = 0; i < s.Count; i++)
{
    cryRpt.SetParameterValue(i, s[i]);
}

您对空参数字段的意思是什么?