我正在使用来自Employee类的存储过程填充可编辑DataGridView的C#中编写程序。我可以使用适当的DataTable来填充网格,并且可以使用CellEndEdit事件来使Update方法工作。我看到网格底部的空白“新行”,允许用户添加一个新行。但是,我无法获得新的行。我相信它在第一个单元格填充后调用CellEndEdit,但是由于剩余表格字段中的空值,它会错误地输出。
因为我正在使用Employee类中的方法来执行Insert,Update,Delete,所以我没有使用TableAdapter。我相信在这一点上我的步骤应该是测试以确定这是否是一个新的行,如果是的话,我需要禁用CellEndEdit。无法使用datagridview插入工作
我试图使用RowLeave事件如下:
private void dgvEmployee_RowLeave(object sender, DataGridViewCellEventArgs e)
{
if (dgvEmployee.Rows[dgvEmployee.CurrentCell.RowIndex].IsNewRow)
{
EmployeeDataAccess empData = new EmployeeDataAccess();
empData.InsertEmployee(dgvEmployee[1, e.RowIndex].Value.ToString(),
dgvEmployee[2, e.RowIndex].Value.ToString(),
dgvEmployee[3, e.RowIndex].Value.ToString(),
Convert.ToInt32(dgvEmployee[4, e.RowIndex].Value));
}
else
{
return;
}
我已经试过这个代码块在CellEndEdit不执行,如果它是一个新行:
private void dgvEmployee_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if (dgvEmployee.Rows[dgvEmployee.CurrentCell.RowIndex].IsNewRow)
{
dgvEmployee.CellEndEdit -= new DataGridViewCellEventHandler(dgvEmployee_CellEndEdit);
return;
}
else
{
EmployeeDataAccess empData = new EmployeeDataAccess();
empData.UpdateEmployee(Convert.ToInt32(dgvEmployee[0, e.RowIndex].Value),
dgvEmployee[1, e.RowIndex].Value.ToString(),
dgvEmployee[2, e.RowIndex].Value.ToString(),
dgvEmployee[3, e.RowIndex].Value.ToString(),
Convert.ToInt32(dgvEmployee[4, e.RowIndex].Value));
}
}
我没有收到错误,但程序不会执行Insert语句。
有人可以给我一点方向,以便如何让一个新的行来调用插入方法吗?
更新:我确实想提到我没有使用按钮。当用户编辑DataGridView中的数据时,我需要在离开单元格时更新数据。这已通过调用Update方法的CellEndEdit事件完成。当用户在新行中输入数据时,我正在寻找相同的结果。我希望用户能够完成在所有列中输入数据,然后在编辑最后一列时自动将新行插入到我的数据表中。
您能够成功运行SQL Server中的存储过程? – confusedandamused
是的。如果我删除CellEndEdit代码,并从RowLeave事件调用Insert方法,它将接受插入的行。 – Wurm