我遇到了这个问题:C#WPF(VS 2013 Pro,.Net Framework 4.0)独立桌面应用程序在所有Windows操作系统上运行良好,但有一个例外:在Windows XP上我收到此错误:
“索引超出范围。必须是非负数且小于集合的大小”。
错误出现在DataGrid(事件MouseDoubleClick或带有ContextMenu)上,在TabControl中(有26个标签,拉丁字母表中的字母(A,B,C ....))当我选择时要从数据网格修改的记录,并打开包含该记录数据的表单(如formName.ShowDialog())。对我来说奇怪的是所有的数字都没问题,我的意思是索引是0(数据网格的第一个记录),而且记录的真实ID也没问题。
这是代码(错误在ShowDialog上);我还尝试在showDialog()周围插入一个try catch,看看会发生什么,所以我得到了错误。
private void dataGridElencoPazienti_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
Persona paziente = getRigaPaz();
if (paziente == null)
{
MessageBox.Show("Prova a selezionare la riga cliccando col pulsante sinistro e poi col destro e quindi selezionare l'opzione desiderata !", "Selezione riga", MessageBoxButton.OK, MessageBoxImage.Exclamation);
return;
}
FormCartellaPaziente formCartellaPaz = new FormCartellaPaziente(datiUtente, idAzienda, paziente, this);
this.Hide();
formCartellaPaz.ShowInTaskbar = true;
//this.ShowInTaskbar = false;
formCartellaPaz.ShowDialog();
}
private Persona getRigaPaz()
{
int idPaziente = 0;
DataRow datarow = null;
DataRowView pazienteSel = null;
Persona paziente = null;
if (dataGridElencoPazienti.SelectedItem == null)
{
//MessageBox.Show("Prova a selezionare la riga cliccando col pulsante sinistro e poi col destro e quindi selezionare l'opzione desiderata !", "Selezione riga", MessageBoxButton.OK, MessageBoxImage.Exclamation);
return null;
}
pazienteSel = (DataRowView) dataGridElencoPazienti.SelectedItem;
try
{
datarow = pazienteSel.Row;
idPaziente = Convert.ToInt16(datarow["id"].ToString());
paziente = new Persona();
paziente = personaDao.read(idPaziente, 0);
}
catch (Exception ex)
{
MessageBox.Show("Errore selezione paz - FormCasellarioPazienti: 309 + ---" + ex.ToString());
}
return paziente;
}
谢谢 阿德里安
答案 0 :(得分:0)
是否可能没有列ID? 然后应该通过以下行触发异常:
idPaziente = Convert.ToInt16(datarow["id"].ToString());
我建议您检查列是否存在并且具有转换为Int16类型的值。
顺便说一句,在ToString()
之前,你不需要Convert.ToInt16
。没有..