我想让datagridview中某一行被选中时,textbox中显示选中的值,datagridview的选中模式是整行:
this.dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
然后
 private void dataGridView1_SelectionChanged(object sender, EventArgs e)
         {
             int index = dataGridView1.SelectedRows[0].Index; //获取选中行的行号
             textBox1.Text = dataGridView1.Rows[index].Cells[0].Value.ToString();
         }
运行时选择datagridview里面的行没有问题,但是当我不小心点击到datagridview的列头时,就提示如下错误:
索引超出范围。必须为非负值并小于集合大小。
参数名: index
这个怎么办?正常情况下点击列头就应该是没有反应的

解决方案 »

  1.   

    if(dataGridView1.SelectedRows[0].Index>0)
    {
    int index = dataGridView1.SelectedRows[0].Index; //获取选中行的行号
      textBox1.Text = dataGridView1.Rows[index].Cells[0].Value.ToString();}
    当你点到列头时,索引值是-1,应该把小于0的值过滤掉
      

  2.   


    if (dataGridView1.SelectedRows.Count < 1)
    {
    return;
    }
    int index = dataGridView1.SelectedRows[0].Index; //获取选中行的行号
    if (dataGridView1.NewRowIndex == index||index<0)
    {
    textBox1.Text = "";
    return;
    }
    textBox1.Text = dataGridView1.Rows[index].Cells[0].Value.ToString();
      

  3.   

    呵呵问题解决了我把代码改成了:
    private void dataGridView1_SelectionChanged(object sender, EventArgs e)
             {
                 if (dataGridView1.SelectedRows.Count>0)
                 {
                     int index = dataGridView1.SelectedRows[0].Index;
                     textBox1.Text = dataGridView1.Rows[index].Cells[0].Value.ToString();
                 }
                 else
                 {
                     textBox1.Text = string.Empty;
                 }
             }
      

  4.   

    在dataGridView1_RowEnter事件中处理,就不用判断,能够避免问题。