在Windows窗体中选择datagridview的第二行时,索引超出范围错误

时间:2016-03-27 04:27:43

标签: c# datagridview datatable

我已经进行了预测并做了所有可以解决这个问题的实验,但没有什么对我有用。我试图将选定的一行从一个数据表中获取。当我选择第一行并单击链接以将数据解析为数据表时,它工作正常,但是当我选择第二行时,我得到索引超出范围错误。以下是我的代码,

private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            int rowindex = dataGridView1.CurrentCell.RowIndex;

            dt.Clear();
            dt.Columns.Add("CustomerId", typeof(string));
            dt.Columns.Add("Style", typeof(string));
            dt.Columns.Add("BookingId", typeof(string));


            DataRow dr = dt.NewRow();

            dr["CustomerId"] = dataGridView1.SelectedRows[rowindex].Cells["CustomerId"].Value; //I get the error here
            dr["Style"] = dataGridView1.SelectedRows[rowindex].Cells["Style"].Value;
            dr["BookingId"] = dataGridView1.SelectedRows[rowindex].Cells["BookingId"].Value;

            dt.Rows.Add(dr);

            Form3 fr = new Form3(dt);
            fr.Show();
            this.Hide();
        }

这真令人困惑。请帮忙

2 个答案:

答案 0 :(得分:2)

RowIndex上的{p> dataGridView1.CurrentCell.RowIndex实际上是DataGridView的行索引,而不是SelectedRows的索引。

修改您的代码,如下所示。

dr["CustomerId"] = dataGridView1.Rows[rowindex].Cells["CustomerId"].Value; //I get the error here
dr["Style"] = dataGridView1.Rows[rowindex].Cells["Style"].Value;
dr["BookingId"] = dataGridView1.Rows[rowindex].Cells["BookingId"].Value;

答案 1 :(得分:1)

在这种情况下,确实没有必要检索Row索引。如果您只需要当前选定的行,那么您的代码应如下所示......

var row = dataGridView1.SelectedRows[0];

dr["CustomerId"] = row.Cells["CustomerId"].Value; 

dr["Style"]      = row.Cells["Style"].Value;

dr["BookingId"]  = row.Cells["BookingId"].Value;

这是不言而喻的,但请先检查以确保实际选择了一行......

此外,如果您想迭代所有选定的行,您可以使用...

foreach(var row in dataGridView1.SelectedRows){
    //execute behaviour here...
}