cellEndEdit事件中的代码如下:
try
{
ocnn = new OleDbConnection(connections);
ocnn.Open(); for (int i = 0; i < dgv_InInfo.Rows.Count - 1; i++)
{
for (int j = 0; j < dgv_InInfo.Rows.Count - 1; j++)
{ string value1 = Convert.ToString(dgv_InInfo.Rows[i].Cells[2].Value);
string value2 = Convert.ToString(dgv_InInfo.Rows[j].Cells[2].Value);
if (i != j && value1 == value2)
{
MessageBox.Show("此货物已当前列表中!", "请注意", MessageBoxButtons.OK, MessageBoxIcon.Information);
dgv_InInfo.Rows.Remove(dgv_InInfo.Rows[j]);
return;
}
else
{
string sql = "select * from MIS_MaterielRegiser where MR_Name='" + value1 + "'"; ocmd = new OleDbCommand(sql, ocnn);
OleDbDataReader reader = ocmd.ExecuteReader();
reader.Read();
dgv_InInfo.Rows[i].Cells[1].Value = reader["MR_Number"].ToString();
dgv_InInfo.Rows[i].Cells[3].Value = reader["MR_Model"].ToString();
dgv_InInfo.Rows[i].Cells[4].Value = reader["MR_Unit"].ToString();
}
}
}
ocnn.Close();
}
catch (Exception)
{
MessageBox.Show("请从'货料名称'中选择一项!");
} value1所在的列为下拉列,当我从下拉列选一个值后,有时候会出现一个异常情况,那就是这个单元格没有取到在下拉列表选定的值,从而导致如题如述的问题,报出异常MessageBox.Show("请从'货料名称'中选择一项!");后自动增加2个空行,找问题我已经找了整整几个小时了。求解答!
try
{
ocnn = new OleDbConnection(connections);
ocnn.Open(); for (int i = 0; i < dgv_InInfo.Rows.Count - 1; i++)
{
for (int j = 0; j < dgv_InInfo.Rows.Count - 1; j++)
{ string value1 = Convert.ToString(dgv_InInfo.Rows[i].Cells[2].Value);
string value2 = Convert.ToString(dgv_InInfo.Rows[j].Cells[2].Value);
if (i != j && value1 == value2)
{
MessageBox.Show("此货物已当前列表中!", "请注意", MessageBoxButtons.OK, MessageBoxIcon.Information);
dgv_InInfo.Rows.Remove(dgv_InInfo.Rows[j]);
return;
}
else
{
string sql = "select * from MIS_MaterielRegiser where MR_Name='" + value1 + "'"; ocmd = new OleDbCommand(sql, ocnn);
OleDbDataReader reader = ocmd.ExecuteReader();
reader.Read();
dgv_InInfo.Rows[i].Cells[1].Value = reader["MR_Number"].ToString();
dgv_InInfo.Rows[i].Cells[3].Value = reader["MR_Model"].ToString();
dgv_InInfo.Rows[i].Cells[4].Value = reader["MR_Unit"].ToString();
}
}
}
ocnn.Close();
}
catch (Exception)
{
MessageBox.Show("请从'货料名称'中选择一项!");
} value1所在的列为下拉列,当我从下拉列选一个值后,有时候会出现一个异常情况,那就是这个单元格没有取到在下拉列表选定的值,从而导致如题如述的问题,报出异常MessageBox.Show("请从'货料名称'中选择一项!");后自动增加2个空行,找问题我已经找了整整几个小时了。求解答!
if (dgv_InInfo.IsCurrentRowDirty == true)
{
for (int i = 0; i < dgv_InInfo.Rows.Count - 1; i++)
{
for (int j = 0; j < dgv_InInfo.Rows.Count - 1; j++)
{ string value1 = Convert.ToString(dgv_InInfo.Rows[i].Cells[2].EditedFormattedValue);
string value2 = Convert.ToString(dgv_InInfo.Rows[j].Cells[2].EditedFormattedValue);
if (i != j && value1 == value2)
{
MessageBox.Show("此货物已当前列表中!", "请注意", MessageBoxButtons.OK, MessageBoxIcon.Information);
dgv_InInfo.Rows.Remove(dgv_InInfo.Rows[j]);
return;
}
else
{
string sql = "select * from MIS_MaterielRegiser where MR_Name='" + value1 + "'"; ocmd = new OleDbCommand(sql, ocnn);
OleDbDataReader reader = ocmd.ExecuteReader();
reader.Read();
dgv_InInfo.Rows[i].Cells[1].Value = reader["MR_Number"].ToString();
dgv_InInfo.Rows[i].Cells[3].Value = reader["MR_Model"].ToString();
dgv_InInfo.Rows[i].Cells[4].Value = reader["MR_Unit"].ToString();
}
}
}
}
else
{
MessageBox.Show("不允许有空值!");
}
catch (Exception)
{
MessageBox.Show("请从'货料名称'中选择一项!");
}
所以提示你的是这个异常`````
嗯你打个断电看看出异常的时候完整的执行SQL到底是什么?
ocnn.Open();
string maxNum = "select max(InSingle_Number) from MIS_InsertSingle";
OleDbCommand max = new OleDbCommand(maxNum, ocnn);
OleDbDataReader dr = max.ExecuteReader();
dr.Read();
int g = dr.GetInt32(0);
this.dgv_InInfo.CurrentRow.Cells[0].Value = g + 1;
ocnn.Close();这里从数据库中取一个最大值+1后赋给当前前。当前面报异常后跳到这里发现int g = dr.GetInt32(0);
this.dgv_InInfo.CurrentRow.Cells[0].Value = g + 1这2句话是会运行2次的,可能这2次才是增加2个空行的关键!