数据网格视图c#windows窗体中的参数索引超出范围

时间:2014-04-11 20:16:54

标签: c#

在c#中的datagridview中选择多行时,任何人都可以帮我说明为什么参数索引输出范围错误...我的代码也在下面给出...错误在else之后if(comboBox2.Text == “选择2”)部分......

 if (comboBox2.Text == "")
        {
            comboBox2.Focus();
            // comboBox2.BackColor = Color.Red;
        }
        else
        {
            if (comboBox2.Text == "Choice 1")
            {

                int ri = dataGridView1.CurrentCell.RowIndex;
                int ci = dataGridView1.CurrentCell.ColumnIndex;
                label4.Show();
                textBox2.Show();
                textBox2.Text = dataGridView1.SelectedRows[ri].Cells["course_name"].Value.ToString();

            }
            else if (comboBox2.Text == "Choice 2")
            {

                int ri = dataGridView2.CurrentCell.RowIndex;
                int ci = dataGridView2.CurrentCell.ColumnIndex;
                label3.Show();
                textBox4.Text = dataGridView2.SelectedRows[ri].Cells["course_name"].Value.ToString();
                textBox4.Show();
            }
            else if (comboBox2.Text == "Choice 3")
            {

                int ri = dataGridView3.CurrentCell.RowIndex;
                int ci = dataGridView3.CurrentCell.ColumnIndex;
                label2.Show();
                textBox3.Text = dataGridView3.SelectedRows[ri].Cells["course_name"].Value.ToString();
                textBox3.Show();
            }
        }

1 个答案:

答案 0 :(得分:0)

DataGridView.SelectedRows是一个包含所选行的集合。仅当您选择网格中的每一行时,它才具有相同的网格行数。但我认为你只选择几行。因此,当前单元格的RowIndex不是SelectedRows集合中的有效索引。

您需要将代码更改为更安全的内容

 if(dataGridView3.SelectedRows.Count > 0)
 {
      textBox3.Text = dataGridView3.SelectedRows[0].Cells["course_name"].Value.ToString();
      ....

或使用currentRow属性。

 DataGridViewRow currentRow = dataGridView3.CurrentRow;
 if(dataGridView3.SelectedRows.Contains(currentRow))
 {
      textBox3.Text = currentRow.Cells["course_name"].Value.ToString();
      ....

但是如果你只想将TextBox3.Text设置为单元格" course_name" currentRow,那么就没有必要涉及SelectedRows集合

 if(dataGridView3.CurrentRow != null)
      textBox3.Text = dataGridView3.CurrentRow.Cells["course_name"].Value.ToString();