2016-03-04 70 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]); 
} 

而且你是什麼意思大約空參數字段