错误“索引超出范围。必须是非负数且小于集合的大小”C#WPF vs2013

时间:2015-04-01 12:28:56

标签: wpf visual-studio-2013

我遇到了这个问题: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;
    }

谢谢 阿德里安

1 个答案:

答案 0 :(得分:0)

是否可能没有列ID? 然后应该通过以下行触发异常:

idPaziente = Convert.ToInt16(datarow["id"].ToString());

我建议您检查列是否存在并且具有转换为Int16类型的值。

顺便说一句,在ToString()之前,你不需要Convert.ToInt16。没有..