本帖最后由 xiaosong2008 于 2012-10-12 00:04:42 编辑

解决方案 »

  1.   

    1、
      
    if (dgvParts == null)
      {
      MessageBox.Show("数据源为空!");
      return;
      }这个改成if (.Rows.Count == 0)2、datagridview的SelectionMode改成FullROwSelect就可以使用SelectionChanged做事了
      

  2.   

    //获取当前单元格所在的行
    dataGridView1.CurrentCell.OwningRow
    dataGridView1.CurrentRow
    最好在取值前判断一下dataGridView1.CurrentRow.IsNewRow如果改了SelectionMode的话,最好把MultiSelect改成False。不能多选.
    也可以用下面这句来区行
    dataGridView1.SelectedRows[0]
      

  3.   

    谢谢haukwong!
    一、记录集为空时,dataGridView控件Rows.Count值却是1的,因此上面的代码改成了
    if (dgvParts.Rows.Count == 1)
       {
          MessageBox.Show("数据源为空!");
          return;
       }
    二、我把datagridview的SelectionMode改成FullRowSelect,执行SelectionChanged事件时,程序提示错误“未将对象引用设置到对象的实例”,下为SelectionChanged事件代码:
            private void dgv1_SelectionChanged(object sender, EventArgs e)
            {
                if (dgv1.Rows.Count == 1)
                {
                    MessageBox.Show("没有相关数据!");
                    return;
                }
                else
                {
                    txtCode.Text = dgv1.CurrentRow.Cells[0].ToString();
                    txtName.Text = dgv1.CurrentRow.Cells[1].ToString();
                    txtRatio.Text = dgv1.CurrentRow.Cells[2].ToString();
                    rtxtRe.Text = dgv1.CurrentRow.Cells[3].ToString();
                }
            }       用CellClick事件可以运行,代码如下:
            private void dgv1_CellClick(object sender, DataGridViewCellEventArgs e)
           {
                    //在dgv1控件的CellClick事件中实现单击某条数据显示详细信息
                     txtCode.Text = dgv1.SelectedCells[1].Value.ToString();
                    txtName.Text = dgv1.SelectedCells[2].Value.ToString();
                    txtRatio.Text = dgv1.SelectedCells[3].Value.ToString();
                    rtxtRe.Text = dgv1.SelectedCells[4].Value.ToString();
           }    但有一个问题,如何让DataGridView控件记载数据源后,第一行是否是自动被选定的?即打开该窗体时,编辑区显示DataGridView控件第一行数据中的值?
      

  4.   

      private void dgv1_SelectionChanged(object sender, EventArgs e)
       {
       if (dgv1.Rows.Count == 1)
       {
       MessageBox.Show("没有相关数据!");
       return;
       }
       else
       {
       txtCode.Text = dgv1.CurrentRow.Cells[0].ToString();
       txtName.Text = dgv1.CurrentRow.Cells[1].ToString();
       txtRatio.Text = dgv1.CurrentRow.Cells[2].ToString();
       rtxtRe.Text = dgv1.CurrentRow.Cells[3].ToString();
       }
       }
    应为:
      private void dgv1_SelectionChanged(object sender, EventArgs e)
       {
       if (dgv1.Rows.Count == 1)
       {
       MessageBox.Show("没有相关数据!");
       return;
       }
       else
       {
       txtCode.Text = dgv1.CurrentRow.Cells[1].ToString();
       txtName.Text = dgv1.CurrentRow.Cells[2].ToString();
       txtRatio.Text = dgv1.CurrentRow.Cells[3].ToString();
       rtxtRe.Text = dgv1.CurrentRow.Cells[4].ToString();
       }
       }
    但这并非产生问题的原因!请大家继续帮忙!谢谢!