我已经进行了预测并做了所有可以解决这个问题的实验,但没有什么对我有用。我试图将选定的一行从一个数据表中获取。当我选择第一行并单击链接以将数据解析为数据表时,它工作正常,但是当我选择第二行时,我得到索引超出范围错误。以下是我的代码,
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();
}
这真令人困惑。请帮忙
答案 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...
}