日期:2014-05-17  浏览次数:20974 次

DataGridView数据源为空记录集时以及SelectionChanged事件的处理方法
我在做的一个窗体,分为快捷工具栏、编辑区、数据表三个部分,编辑区由TextBox等控件组成,进行数据的新增和编辑操作,数据表由一个DataGridView控件组成,用来显示数据源中的数据。目前,单击工具栏中的“编辑”按钮,则编辑区中的TextBox控件中显示DataGridView控件中选中行的数据以供修改,单击“保存”按钮后,保存修改后的数据,大部分功能已经实现。
  目前,还有以下问题有待解决:
  一、当DataGridView数据源为空记录集时,即下面的iniDgvParts()事件中,ds1.Tables[0]中没有一行数据时,单击“编辑”时,会提示“未将对象引用设置到对象的实例”错误,代码中红色部分为提示错误的地方;
  下为代码:
  \\单击“编辑”按钮触发事件
  private void tbEdit_Click(object sender, EventArgs e)
  {
  iniDgvParts();
  if (dgvParts == null)
  {
  MessageBox.Show("数据源为空!");
  return;
  }
  else
  { 
  partId1 = dgvParts.CurrentRow.Cells[0].Value.ToString();
  if (partId1 == "" || partId1 == null)
  {
  MessageBox.Show("请选择要编辑的数据行!");
  return;
  }
  else
  { 
  strSql1 = "select * from parts where partId="+ Convert.ToInt32(partId1)+"";
  database.getSqlCmd(strSql1);
  txtPartCode.Text = dgvParts.CurrentRow.Cells[1].Value.ToString();
  txtPartName.Text = dgvParts.CurrentRow.Cells[2].Value.ToString();
  rtxtRemark.Text = dgvParts.CurrentRow.Cells[6].Value.ToString();
  }  
  }
  tbSave.Enabled = true;
  }

  //DataGriVIew控件加载数据源,dgvParts为DataGridView控件
  private void iniDgvParts()
  {
  strSql1 = "select a.partId as 序号,a.partCode as 代码,a.partName as 名称, b.styleCategoryName as 款式类型,a.maintainDate as 维护日期,a.maintainMan as 维护人,a.remark as 备注 from parts a join clothStyleCategory b on b.styleCategoryId=a.clothStyleCategoryId ";
  DataSet ds1 = operateData.getDs(strSql1, "tb1");
  dgvParts.DataSource = ds1.Tables[0];
  dgvParts.Columns[0].Visible = false;
  }
  else
  {
  return;
  }
  }

  二、我想实现单击DataGridView控件中的某行记录,即在编辑区中显示相应的数据,该如何实现?我用了DataGridView控件的SelectionChanged事件和CellClick事件,没有实现成功。
  以上问题,请大家帮忙看一下!谢谢!

------解决方案--------------------
1、
  
if (dgvParts == null)
{
MessageBox.Show("数据源为空!");
return;
}

这个改成if (.Rows.Count == 0)



2、datagridview的SelectionMode改成FullROwSelect就可以使用SelectionChanged做事了

------解决方案--------------------

C# code

//获取当前单元格所在的行
dataGridView1.CurrentCell.OwningRow
dataGridView1.CurrentRow