C#中datagridview单元格跳转问题
我现在在keydown事件是写了代码,跳转到当前行的某个单元格,但是运行之后,跳转的是下一行的某个单元格,不知道是为什么?

if (this.dgvyzlr.Rows[rowid].Cells["ischild"].Value.Equals("1")) { //如果是子医嘱,则跳过用法,频率,直接跳到实际用量 this.dgvyzlr.CurrentCell = this.dgvyzlr.Rows[rowid].Cells["shijiyongliang"]; this.dgvyzlr.Rows[rowid].Cells["yongfa"].ReadOnly = true; this.dgvyzlr.Rows[rowid].Cells["pinlv"].ReadOnly = true; } else { if (this.cblrfs.Text.Equals("自由录入")) { //规格获得焦点 this.dgvyzlr.CurrentCell = this.dgvyzlr.Rows[rowid].Cells["guige"]; this.dgvyzlr.Rows[rowid].Cells["guige"].ReadOnly = false; } else if (this.cblrfs.Text.Equals("临床项目")) { //用法获得焦点 this.dgvyzlr.CurrentCell = this.dgvyzlr.Rows[rowid].Cells["yongfa"]; this.dgvyzlr.Rows[rowid].Cells["yongfa"].ReadOnly = false; } } this.dgvyzlr.Rows[rowid].Cells["yizhuneirong"].Value = this.dgvypxm.Rows[index].Cells["ypmingcheng"].Value.ToString();//医嘱内容 this.price = double.Parse(this.dgvypxm.Rows[index].Cells["ypdanjia"].Value.ToString());//单价 this.dgvyzlr.Rows[rowid].Cells["yizhuneirong"].Tag = this.dgvypxm.Rows[index].Cells["ypdanjia"].Value.ToString(); this.dgvyzlr.Rows[rowid].Cells["guige"].Value = this.dgvypxm.Rows[index].Cells["ypguige"].Value.ToString();//规格 this.dgvyzlr.Rows[rowid].Cells["yongliangdw"].Value = this.dgvypxm.Rows[index].Cells["ypyongliangdw"].Value.ToString();//用量单位 this.dgvyzlr.Rows[rowid].Cells["danwei"].Value = this.dgvypxm.Rows[index].Cells["ypdanwei"].Value.ToString();//单位 this.dgvyzlr.Rows[rowid].Cells["yaopinfenlei"].Value = this.dgvypxm.Rows[index].Cells["ypsx"].Value.ToString();//药品分类 this.dgvyzlr.Rows[rowid].Cells["ypbh"].Value = this.dgvypxm.Rows[index].Cells["ypbm"].Value.ToString();//药品编号 this.dgvyzlr.Rows[rowid].Cells["ydbh"].Value = this.dgvypxm.Rows[index].Cells["ypyaodian"].Value.ToString();//药典编号 jlxs = float.Parse(this.dgvypxm.Rows[index].Cells["jl_xs"].Value.ToString());//剂量 this.dgvyzlr.Rows[rowid].Cells["lcxmbh"].Value = "000000"; #region 药房编号 string yfbh = czyfbh(this.dgvypxm.Rows[0].Cells["ypyaofangmc"].Value.ToString()); this.dgvyzlr.Rows[rowid].Cells["yfbh"].Value = yfbh; #endregion heji(); this.dgvyzlr.BeginEdit(true); this.pnypxm.Visible = false;
private void dgvyzlr_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
try
{
//if (sfzxsjclq)
//{
// 检测是否被编辑单元格
if (e.Control is DataGridViewTextBoxEditingControl)
{
DataGridView dgv = (DataGridView)sender;
// 取得被表示的控件
DataGridViewTextBoxEditingControl tb = (DataGridViewTextBoxEditingControl)e.Control;
// 事件处理器删除
tb.PreviewKeyDown -= new PreviewKeyDownEventHandler(dgvyzlr_PreviewKeyDown);
// 添加处理事件
tb.PreviewKeyDown += new PreviewKeyDownEventHandler(dgvyzlr_PreviewKeyDown);
// 事件处理器删除
tb.KeyUp -= new KeyEventHandler(dgvyzlr_KeyUp);
// 添加处理事件
tb.KeyUp += new KeyEventHandler(dgvyzlr_KeyUp);
}
else if (e.Control is DataGridViewComboBoxEditingControl)
{
DataGridView dgv = (DataGridView)sender;
// 取得被表示的控件
DataGridViewComboBoxEditingControl tb = (DataGridViewComboBoxEditingControl)e.Control;
// 事件处理器删除
tb.PreviewKeyDown -= new PreviewKeyDownEventHandler(dgvyzlr_PreviewKeyDown);
// 添加处理事件
tb.PreviewKeyDown += new PreviewKeyDownEventHandler(dgvyzlr_PreviewKeyDown);
}
//}
//else
//{
// sfzxsjclq = true;
//}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "异常", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
//if (sfzxsjclq)
//{
if (keyData == Keys.Left || keyData == Keys.Right)
{
SendKeys.Send("{F1}");
return true;
}
//}
//else
//{
// sfzxsjclq = true;
//}
return base.ProcessCmdKey(ref msg, keyData);
}
{
try
{
//if (sfzxsjclq)
//{
// 检测是否被编辑单元格
if (e.Control is DataGridViewTextBoxEditingControl)
{
DataGridView dgv = (DataGridView)sender;
// 取得被表示的控件
DataGridViewTextBoxEditingControl tb = (DataGridViewTextBoxEditingControl)e.Control;
// 事件处理器删除
tb.PreviewKeyDown -= new PreviewKeyDownEventHandler(dgvyzlr_PreviewKeyDown);
// 添加处理事件
tb.PreviewKeyDown += new PreviewKeyDownEventHandler(dgvyzlr_PreviewKeyDown);
// 事件处理器删除
tb.KeyUp -= new KeyEventHandler(dgvyzlr_KeyUp);
// 添加处理事件
tb.KeyUp += new KeyEventHandler(dgvyzlr_KeyUp);
}
else if (e.Control is DataGridViewComboBoxEditingControl)
{
DataGridView dgv = (DataGridView)sender;
// 取得被表示的控件
DataGridViewComboBoxEditingControl tb = (DataGridViewComboBoxEditingControl)e.Control;
// 事件处理器删除
tb.PreviewKeyDown -= new PreviewKeyDownEventHandler(dgvyzlr_PreviewKeyDown);
// 添加处理事件
tb.PreviewKeyDown += new PreviewKeyDownEventHandler(dgvyzlr_PreviewKeyDown);
}
//}
//else
//{
// sfzxsjclq = true;
//}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "异常", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
//if (sfzxsjclq)
//{
if (keyData == Keys.Left || keyData == Keys.Right)
{
SendKeys.Send("{F1}");
return true;
}
//}
//else
//{
// sfzxsjclq = true;
//}
return base.ProcessCmdKey(ref msg, keyData);
}
在dgvyzlr的PreviewKeyDown的事件中调用这个方法的话,执行到this.dgvyzlr.BeginEdit(true)这句,程序就会跳转到EditingControlShowing和ProcessCmdKey里边,然后窗体上就会跳转到下一行,如果不执行这一句,或者是在dgvypxm的keydown事件中执行第一个方法,就没问题,不知道是哪里出了错??请各位帮帮忙