DataGridView & ldquo; Enter & rdquo; Managing key events

advertisements

I have a DataGridView populated with DataTable, have 10 columns. I have a scenario when moving from one row to another when I click on Enter key then I need that row should be selected and need to have that row values.

But here when I select n-th row then it automatically moves to n+1 Row.

Please help me in this...

In Page Load Event:

SqlConnection con =
    new SqlConnection("Data Source=.;Initial Catalog=MHS;User ID=mhs_mt;[email protected]");

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

Then,

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());
}


That's the default behaviour of the DataGridView, and pretty standard in other data grids by 3rd party vendors too.

Here is what happens:

  1. The user hits the enter key
  2. The DataGridView receives the KeyPress event and performs various actions (such as ending edits, etc), and then moves the cell down one row.
  3. Then the DataGridView checks to see if there are any event handlers hooked up by you and fires those.

So by the time the enter key is pressed, the current cell has already changed.

You could use the following if you want to get the row that the user was on before the DataGridView changes the row. This should fit in with your existing code (obviously you will need to add the event handler for it):

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

I hope that helps point you in the right direction. Not sure what you are hoping to do here, but hopefully this explains what you are seeing happen.