[英]After removing an element from binded list and select a row in DataGridView, that row is deleted too in Winforms C#
我知道标题太长了,我来解释一下情况:我将数据网格视图绑定到一个列表:
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 是可见的。
您需要告诉表单引擎(和 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;
}
}
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.