我正在使用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 )这再次给了我与之前相同的无效索引例外。
发生了什么事?
修改
经过大量测试后,我意识到我做得很好,问题在于参数字段。我没有创建各种参数字段,而是每次使用相同的参数字段。对不起,非常感谢大家。
答案 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]);
}
您对空参数字段的意思是什么?