为了账号安全,请及时绑定邮箱和手机立即绑定

从绑定列表中删除一个元素并在 DataGridView 中选择一行后,该行也会在 Winforms

从绑定列表中删除一个元素并在 DataGridView 中选择一行后,该行也会在 Winforms

C#
繁华开满天机 2022-12-31 10:52:44
我知道标题太长,我会解释一下情况:我将数据网格视图绑定到列表: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;

        }

    }

};



查看完整回答
反对 回复 2022-12-31
  • 1 回答
  • 0 关注
  • 42 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信