c# – DataGridView“Enter”键事件处理

我有一个填充了DataTable的DataGridView,有10列.当我单击Enter键时,我有一个从一行移动到另一行的情况,然后我需要选择该行,并且需要具有该行值.

但是当我选择第n行时,它会自动移动到n 1行.

请帮帮我…

页面加载事件中:

sqlConnection con = 
    new sqlConnection("Data Source=.;Initial Catalog=MHS;User ID=mhs_mt;Password=@mhsinc");

DataSet ds = new System.Data.DataSet();
sqlDataAdapter da = new sqlDataAdapter("select * from MT_INVENTORY_COUNT",con);
da.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];

然后,

private void dataGridView1_KeyPress(object sender,KeyPressEventArgs e)
{
     if (e.KeyChar == (Char)Keys.Enter)
     {
           int i = dataGridView1.CurrentRow.Index;
           MessageBox.Show(i.ToString());
     }     
}

private void dataGridView1_CellClick(object sender,DataGridViewCellEventArgs e)
{
    int i = dataGridView1.CurrentRow.Index;
    MessageBox.Show(i.ToString());
}

解决方法

这是DataGridView的认行为,也是第三方供应商在其他数据网格中的标准.

这是发生的事情:

>用户点击回车键
> DataGridView接收KeyPress事件并执行各种操作(例如结束编辑等),然后将单元格向下移动一行.
>然后DataGridView检查是否有任何事件处理程序被您连接并触发它们.

因此,当按下回车键时,当前单元格已经改变.

如果要在DataGridView更改行之前获取用户所在的行,可以使用以下命令.这应该适合您现有的代码(显然您需要为它添加事件处理程序):

void dataGridView1_PreviewKeyDown(object sender,PreviewKeyDownEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        int i = dataGridView1.CurrentRow.Index;
        MessageBox.Show(i.ToString());
    }     
}

我希望这有助于指出你正确的方向.不知道你希望在这里做什么,但希望这能解释你所看到的情况.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...