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

我知道标题太长,我会解释一下情况:我将数据网格视图绑定到列表:


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 是可见的。


繁华开满天机
浏览 43回答 1
1回答

胡子哥哥

您需要告诉表单引擎(和 DataGridView)您已经处理了该 KeyDown 事件,否则它(DataGridView)将收到密钥并执行其默认操作(删除一行)dataGridView1.KeyDown += (s, ev) =>{&nbsp; &nbsp; if (ev.KeyCode == Keys.Delete)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; var item = dataGridView1.SelectedRows[0].DataBoundItem as MyViewModel;&nbsp; &nbsp; &nbsp; &nbsp; if (item != null)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _list.Remove(item);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dataGridView1.Rows[0].Selected = true;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ev.Handled = true;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }};
打开App,查看更多内容
随时随地看视频慕课网APP