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