2014-09-29 82 views
1

我知道这个问题(或它的变体)已经拿出了几次。但到目前为止,我还没有找到适合我的解决方案。阻止Windows窗体DataGridView移动到下一行上按ENTER键

我正在写一个Windows使用包含一个DataGridView呈现雇员数据的只读集合作为一种荣耀选择列表中的C#用户控件形式。网格是只读的(在control_load上填充)并将FullRowSelect设置为选择方法。我希望用户能够通过双击鼠标或使用当前行上的Enter键来选择一个由订户在其他地方处理的行的Id值。

在分配我选择员工价值后处理KeyDown事件,我试图阻止选择移动到下一行。这个工作正常,除了当CurrentCell.RowIndex为零。 有谁知道我可以如何得到这个工作CurrentCell.Rowindex = 0?

private void dgvEmployees_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     if (dgvEmployees.CurrentRow.Cells[0].Value != null) 
     { 
      this.SelectedEmployeeId = (int) dgvEmployees.CurrentRow.Cells[0].Value; 
      this.OnEmployeeSelected(new TestEmployeeGridListEventArgs() { 
      SelectedEmployeeId = this.SelectedEmployeeId, 
      SelectedEmployeeIdentifier = dgvEmployees.CurrentRow.Cells["Identifier"].Value.ToString() 
      }); 
     } 

     // Prevent pressing <enter key> moving onto the next row. 
     if (dgvEmployees.CurrentCell.RowIndex > 0) 
     { 
      dgvEmployees.CurrentCell = dgvEmployees[1, dgvEmployees.CurrentCell.RowIndex - 1]; 
      dgvEmployees.CurrentRow.Selected = true; 
     } 
     else 
     { 
      dgvEmployees.CurrentCell = dgvEmployees[1, 0]; 
      dgvEmployees.Rows[0].Cells[1].Selected = true; 
     }   
    } 
} 
+2

你试过了'e.Handled = true;'还是'e.SuppressKeyPress'? – Reniuz 2014-09-29 09:52:40

+0

我没有想到这一点。在else块中将e.Handled或SuppressKeyPress设置为true可以让我确切地找到我正在寻找的行为。非常感谢。 – 2014-09-29 10:04:31

+0

你可以用它来代替所有'if'语句的代码块 – Reniuz 2014-09-29 10:07:05

回答

2

感谢Reniuz的抬头。我所需要的只是设置e.Handled = truee.SuppressKeyPress = true替换整个if (dgvEmployees.CurrentCell.RowIndex > 0)声明。

if (e.KeyCode == Keys.Enter) 
{ 
    if (dgvEmployees.CurrentRow.Cells[0].Value != null) 
    { 
     this.SelectedEmployeeId = (int) dgvEmployees.CurrentRow.Cells[0].Value; 
     this.OnEmployeeSelected(new TestEmployeeGridListEventArgs() { 
      SelectedEmployeeId = this.SelectedEmployeeId, 
      SelectedEmployeeIdentifier = dgvEmployees.CurrentRow.Cells["Identifier"].Value.ToString() 
     }); 
    } 

    e.SuppressKeyPress = true; 
} 
相关问题