c# Winform datagridview 点中一行后点修改,修改后光标和滚动条还定位在修改的这个记录上
不想刷新到第一条
调用Focus()
方法并设置CurrentCell
为你需要定位的单元格式,示例如下:
var rowIndex = 0;
var cellIndex = 2;
dataGridView1.Focus();
dataGridView1.CurrentCell = dataGridView1.Rows[rowIndex].Cells[cellIndex];
这里的
rowIndex
和cellIndex
是你要定位的行,列索引。
DataGridView编辑后可以立即更新到数据库
#region DGV直接编辑修改数据的功能
/// <summary>
/// 用来存放dgv单元格修改之前值
/// </summary>
Object cellTempValue = null;
/// <summary>
/// DGV单元格开始编辑时触发的事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dgv_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
cellTempValue = dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
}
/// <summary>
/// DGV单元格结束编辑时触发的事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dgv_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
//判断编辑前后的值是否一样(是否修改了内容)
if (Object.Equals(cellTempValue, dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value))
{
//如果没有修改,则返回
return;
}
//判断用户是否确定修改
if (MessageBox.Show("确定修改?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.None) != DialogResult.OK)
{
//如果不修改,恢复原来的值
dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = cellTempValue;
return;
}
//修改数据库数据
string sql = String.Format("update Enviroment_LogCurLog set {0} = '{1}' where {2} ='{3}'",
dgv.Columns[this.dgv.CurrentCell.ColumnIndex].DataPropertyName, //所选单元格列名
dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value, //所选单元格修改
dgv.Columns[0].DataPropertyName, //所选单元格列名
dgv.Rows[e.RowIndex].Cells[0].Value); //所选行的商品
try
{
int n = SqlHelper.ExecuteNonQuery(sql);
string msg = n > 0 ? "操作成功" : "操作失败";
MessageBox.Show(msg);
}
catch (OleDbException ex)
{
MessageBox.Show(ex.Message);
}
}
#endregion