2016-03-04 136 views
0

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

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))我知道这是suposed意味着该我引入的参数名称与报告中的参数名称不同。问题是因为我复制并粘贴它是肯定的,所以它是相同的。

在进一步的测试,我发现,如果我cange参数名称形式prueba1只是prueba它的工作原理。所以我认为这是因为参数字段的名称不能有数字,所以我已经改变了所有名称(例如,而不是prueba2,测试),这又给了我相同的无效索引 excepcion和以前一样。

发生了什么事?

编辑

大量的测试后,还好吧,我意识到,我正在做就OK了,问题与参数字段。我没有创建各种参数字段,而是每次都使用相同的参数字段。对不起,非常感谢大家。

+0

可能需要从报告中删除所有参数并重新创建它们。然后重试。据我所知,参数名称可以有数字,那不是你的问题。 – aMazing

+0

@aMazing那没有用 – Carles

+0

检查答案: http://stackoverflow.com/questions/35862733/crystal-report-invalid-index-exception-from-hresult-0x8002000b-disp-e-badin/35954722# 35954722 – 2016-03-12 07:17:36

回答

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]); 
} 

而且你是什么意思大约空参数字段