我知道标题太长,我会解释一下情况:我将数据网格视图绑定到列表:BindingList<MyViewModel> _list = new BindingList<MyViewModel>{ new MyViewModel{ Num =1 , Val ="test"}, new MyViewModel{ Num =2 , Val ="test1"}, new MyViewModel{ Num =3 , Val ="test2"},};dataGridView1.DataSource = _list;dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;dataGridView1.MultiSelect = false;我绑定了事件来监听 Delete 命令: dataGridView1.KeyDown += (s, ev) => { if (ev.KeyCode == Keys.Delete) { var item = dataGridView1.SelectedRows[0].DataBoundItem as MyViewModel; if (item != null) { _list.Remove(item); dataGridView1.Rows[0].Selected = true; } } };和视图模型看起来像:public sealed class MyViewModel{ public string Val { get; set; } public int Num { get; set; }}在网格中我将有 3 个项目:如果我删除项目 3,项目 2 也会被删除(或者可能隐藏)为什么 ?删除一个项目后,我想从数据网格中选择第一个项目dataGridView1.Rows[0].Selected = true;。如果我删除dataGridView1.Rows[0].Selected = true;则很好,项目 2 是可见的。
1 回答
胡子哥哥
TA贡献1825条经验 获得超6个赞
您需要告诉表单引擎(和 DataGridView)您已经处理了该 KeyDown 事件,否则它(DataGridView)将收到密钥并执行其默认操作(删除一行)
dataGridView1.KeyDown += (s, ev) =>
{
if (ev.KeyCode == Keys.Delete)
{
var item = dataGridView1.SelectedRows[0].DataBoundItem as MyViewModel;
if (item != null)
{
_list.Remove(item);
dataGridView1.Rows[0].Selected = true;
ev.Handled = true;
}
}
};
- 1 回答
- 0 关注
- 42 浏览
添加回答
举报
0/150
提交
取消