c# Winform datagridview 点中一行后点修改,修改后光标和滚动条还定位在修改的这个记录上

c# Winform datagridview 点中一行后点修改,修改后光标和滚动条还定位在修改的这个记录上
不想刷新到第一条

调用Focus()方法并设置CurrentCell为你需要定位的单元格式,示例如下:

var rowIndex = 0;
var cellIndex = 2;
dataGridView1.Focus();
dataGridView1.CurrentCell = dataGridView1.Rows[rowIndex].Cells[cellIndex];

这里的rowIndexcellIndex是你要定位的行,列索引。

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