在DataGridView C#中选择行时索引超出范围

时间:2017-08-22 21:23:01

标签: c# winforms visual-studio

我正在使用DataSource向我的DataGridView填写可用的信用卡,然后我在最后添加虚拟信用卡以使用新的信用卡。

private void ListCards()
    {            
        cards.Add(new CreditCard
        {
            Token = "new",
            LastFour = "New Card"
        });           
    }

当我选择“新”行并将其传递到下一篇文章时,我得到Index was out of range. Must be non-negative and less than the size of the collection.

private void Ok_btn_Click(object sender, EventArgs e)
    {
        int selectedRowIndex = CreditCards_grdvw.SelectedCells[0].RowIndex;
        tkn = Convert.ToString(CreditCards_grdvw.SelectedRows[selectedRowIndex].Cells[0]);
        this.DialogResult = DialogResult.OK;
        Close();

    }

我已经检查过以确保行数大于SelectedRowIndex但我仍然收到错误。此外,当cards最初有一条记录并添加虚拟“新”记录时,我使用Visual Studio的即时窗口?CreditCards_grdvw.SelectedRows[0].Cells[0].Value,我回到“新”。我应该在索引0处获得实际的卡,而不是虚拟卡。

我意识到我可以添加另一个按钮来获得相同的功能,但我不愿意。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

这是问题吗?

在获取selectedRowIndex时,您引用SelectedCells集合中的第一个对象。但是,在下一行中,您尝试引用SelectedRows集合。这样可以解决吗?

private void Ok_btn_Click(object sender, EventArgs e)
{
    int selectedRowIndex = CreditCards_grdvw.SelectedCells[0].RowIndex;
    tkn = Convert.ToString(CreditCards_grdvw.Rows[selectedRowIndex].Cells[0]);  //Reference the Rows[] collection, not SelectedRows[].
    this.DialogResult = DialogResult.OK;
    Close();

}