关于GridView按快捷键删除行,传统的方式都是用GridView的keyDown事件来实现的,但是用GridView的KeyDown事件有一个烦恼就是当GridView处于编辑状态的时候,KeyDown事件是不会触发的,原因是此时的焦点并不在GridView上,而是处于一个当前编辑框上,遇到这种情况,要么就是让不允许有编辑,要么就是在GridView的ShownEditor事件触发的时候注册当前编辑框即gridView.ActiveEditor的keyDown事件,这两种方式都着实都不是完美的解决方案,今天无意间发现其实GridControl还提供一个用来完美解决这个问题的事件ProcessGridKey。
关于这个事件的说明如图所示,意思就是能够在网格控件的焦点视图和活动的就地编辑状态下按键的时候触发,这样一来就完美解决了处于编辑状态下不触发GridView的KeyDown事件问题。
利用Ctrl+Delete按键来删除行的代码如下:
注册GridControl的ProcessGridKey事件:
gridControl1.ProcessGridKey += gridControl1_ProcessGridKey;
private void gridControl1_ProcessGridKey(object sender, KeyEventArgs e)
{
DevExpress.XtraGrid.Views.Base.ColumnView view = (sender as DevExpress.XtraGrid.GridControl).FocusedView as DevExpress.XtraGrid.Views.Base.ColumnView;
if (view == null) return;
if (e.KeyCode == Keys.Delete && e.Control && view.OptionsBehavior.AllowDeleteRows!= DevExpress.Utils.DefaultBoolean.False && view.SelectedRowsCount > 0)
{
if (DevExpress.XtraEditors.XtraMessageBox.Show($"确定删除所选{view.SelectedRowsCount}行?", "提问", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
view.DeleteSelectedRows();
}
}
效果图: