После удаления элемента из связанного списка и выбора строки в DataGridView эта строка также удаляется в Winforms C # - PullRequest
1 голос
/ 25 апреля 2019

Я знаю, что заголовок слишком длинный, я объясню ситуацию: у меня есть представление сетки данных, привязанное к списку:

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 тоже будет удален (или может быть скрыт) * ​​1010 *

Почему?

После удаления элемента я хочу выбрать первый элемент из сетки данных dataGridView1.Rows[0].Selected = true;.

Если удалить dataGridView1.Rows[0].Selected = true;, то все в порядке, элемент 2 виден.

1 Ответ

1 голос
/ 25 апреля 2019

Вам нужно сообщить механизму форм (и 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;
        }
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...