求教高手,很寸的问题,datagridview绑定datatable后在datagridview中删除行然后上下移动行出现问题
datagridview直接绑定datatable后。
下面 datagridview用dgv代替,dgv允许自动新增行,即:dgv.AllowUserToAddRows=true,datatable用dt代替
删除行按钮的代码:
if (dgv.CurrentCellAddress.Y >= 0 && dgv.CurrentRow.IsNewRow == false)
{
dgv.Rows.Remove(dgv.CurrentRow);
}
使用上面的代码,在dgv中就 真 删除了一行,同时这一行在dt中 假 删除了(只做了删除标记,而没有真的删除),dgv中的行索引和dt中的行索引就不一致了。
如果这个时候使用上下行移动代码:
向上移动行代码:
if (dgv.RowCount > 2 && dgv.CurrentRow.Index > 0 && dgv.CurrentRow.Index < dgv.RowCount - 1)
{
object[] _sourceRow = dt.Rows[dgv.CurrentRow.Index].ItemArray;
object[] _destRow = dt.Rows[dgv.CurrentRow.Index - 1].ItemArray;
dt.Rows[dgv.CurrentRow.Index].ItemArray = _destRow;
dt.Rows[dgv.CurrentRow.Index - 1].ItemArray = _sourceRow;
dgv.ClearSelection();
dgv.CurrentCell = dgv.Rows[dgv.CurrentRow.Index - 1].Cells[0];
}
向下移动代码
if (dgv.RowCount > 2 && dgv.CurrentRow.Index >=0 && dgv.CurrentRow.Index < dgv.RowCount - 2)
{
object[] _sourceRow = dt.Rows[dgv.CurrentRow.Index].ItemArray;
object[] _destRow = dt.Rows[dgv.CurrentRow.Index + 1].ItemArray;
dt.Rows[dgv.CurrentRow.Index].ItemArray = _destRow;
dt.Rows[dgv.CurrentRow.Index + 1].ItemArray = _sourceRow;
dgv.ClearSelection();
dgv.CurrentCell = dgv.Rows[dgv.CurrentRow.Index + 1].Cells[0];
}
如果没有删除行的存在,以上代码运绝对没有任何问题,但是在dgv中删除行后,因为行索引不一致了,所以上下移动行就出现了问题。比如在要上移或下移的记录的上一行删除了记录后就出现了错误。
如果删除事件采用dt中直接删除行:
dt.Rows.RemoveAt(dataGridView1.CurrentRow.Index);
这个时候上下移动行没有任何问题,但保存数据的时候因为删除行是直接在dt中删除的,这个删除动作不会在数据库中更新,也即这种删除的方法并不能使数据库中的数据也删除。
现在有什么办法让删除数据时dgv和dt中的行索引值保持一致又能更新数据呢?
求教各位高手!