我想让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.   

    textBox1.Text = dataGridView1.SelectedRows[0].Cells[0].Value.ToString().Trim();例如我的:                    CustomerID.Text = dataGridView1.SelectedRows[0].Cells[0].Value.ToString().Trim();
                        CustomerName.Text = dataGridView1.SelectedRows[0].Cells[1].Value.ToString().Trim();
                        CustomerSex.Text = dataGridView1.SelectedRows[0].Cells[2].Value.ToString().Trim();
                        CustomerQQ.Text = dataGridView1.SelectedRows[0].Cells[3].Value.ToString().Trim();
                        CustomerPhone.Text = dataGridView1.SelectedRows[0].Cells[4].Value.ToString().Trim();
                        CustomerAddress.Text = dataGridView1.SelectedRows[0].Cells[5].Value.ToString().Trim();
      

  2.   

    textBox1.Text = dataGridView1.SelectedRows[0].Cells[0].Value.ToString().Trim();例如我的:                    CustomerID.Text = dataGridView1.SelectedRows[0].Cells[0].Value.ToString().Trim();
                        CustomerName.Text = dataGridView1.SelectedRows[0].Cells[1].Value.ToString().Trim();
                        CustomerSex.Text = dataGridView1.SelectedRows[0].Cells[2].Value.ToString().Trim();
                        CustomerQQ.Text = dataGridView1.SelectedRows[0].Cells[3].Value.ToString().Trim();
                        CustomerPhone.Text = dataGridView1.SelectedRows[0].Cells[4].Value.ToString().Trim();
                        CustomerAddress.Text = dataGridView1.SelectedRows[0].Cells[5].Value.ToString().Trim();
      

  3.   


    private void dataGridView1_SelectionChanged(object sender, EventArgs e)
    {
      if(this.dataGridView1.SelectedRows.Count>0)//加个判断吧
      {
        int index = dataGridView1.SelectedRows[0].Index; //获取选中行的行号
        textBox1.Text = dataGridView1.Rows[index].Cells[0].Value.ToString();
      }
    }
      

  4.   

    或者private void dataGridView1_SelectionChanged(object sender, EventArgs e)
    {
      if(e.RowIndex>=0)//加个判断吧
      {
        int index = dataGridView1.SelectedRows[0].Index; //获取选中行的行号
        textBox1.Text = dataGridView1.Rows[index].Cells[0].Value.ToString();
      }
    }
      

  5.   

    private void dataGridView1_SelectionChanged(object sender, EventArgs e)
    {
      if(e.RowIndex>=0)//加个判断吧
      {
        int index = dataGridView1.SelectedRows[0].Index; //获取选中行的行号
        textBox1.Text = dataGridView1.Rows[index].Cells[0].Value.ToString();
      }
    }
      

  6.   

    我也弄过这样的东西 我直接把 textbox绑定到一列 然后点击datagridview的时候 就会出 数据 点表头 也没出现那个错误。 
    LS的方案也可以采用。。