Как удалить строку из datagridview с помощью кнопки удаления? - PullRequest
3 голосов
/ 22 апреля 2009

У меня есть DataGridView с BindingSource, привязывающим его к DataTable. Я поместил кнопку «Удалить» в мою форму, и я хочу, чтобы она удаляла выбранную строку при нажатии, что-то вроде этого:

    if (dgvResourceSettings.CurrentRow != null && !dgvResourceSettings.CurrentRow.IsNewRow)
    {
        bindingSource.RemoveCurrent();
    }

Проблема в том, что новая строка видна в моем обзоре данных. Если пользователь выбирает эту строку, а затем нажимает кнопку «Удалить», он удаляет последнюю строку данных, то есть ту, которая находится над новой строкой. Это происходит потому, что когда сетка данных теряет фокус, она меняет текущую строку на последнюю строку данных (если текущая строка была новой строкой). Я могу убедиться в этом, просто нажав на вкладку «Просмотр данных».

Так что мне интересно, как это нормально? Я знаю, что пользователи могут просто выбрать строку и нажать клавишу DEL, но я также хочу дать им кнопку Удалить.

спасибо.

ОБНОВЛЕНИЕ: из ответов / комментариев кажется, что это нормальное поведение, поэтому трудно иметь кнопку Удалить и новую строку. Я решил удалить новую строку и вместо этого использовать кнопки «Добавить» и «Удалить».

Ответы [ 4 ]

3 голосов
/ 22 апреля 2009

В моем DataGrid есть столбец кнопки удаления с кнопкой для каждой строки, для которой Tag установлен на соответствующий элемент. Затем обработчик щелчка получает значение тега и удаляет этот элемент. Это позволяет избежать проблем с событиями выбора и т. Д.

1 голос
/ 24 апреля 2009

Решением является использование свойства "SelectedRows":

if (this.dataGridView1.SelectedRows.Count > 0)
  {
    foreach (DataGridViewRow dgvrCurrent in dataGridView1.SelectedRows)
  {
    if (dgvrCurrent == dataGridView1.CurrentRow)
      {
        dataGridView1.CurrentCell = null;
      }

    // Delete Row Here
  }
1 голос
/ 22 апреля 2009

Источник должен быть таким: «когда сетка данных теряет фокус, она меняет текущую строку на последнюю строку данных». Это не обычный случай, вы должны что-то делать (события keybd?), Чтобы это произошло.

Я сделал кнопки удаления под сеткой, и они работали нормально.

Редактировать: После разъяснения речь идет об особом статусе «Новая строка», это своего рода виртуальный. Я вроде вижу причину этого, предположим, что выбор не сместился назад при выходе из сетки. CurrentRow будет нулевым. В вашем случае это было бы хорошо, но часто это не так.

Одна идея: отследить свойство Current (BindingSource) и отключить кнопку «Удалить», если строка не является текущей. Проверьте, как это работает, когда новая строка (наполовину) заполнена.

И в остальном идея Джеффа тоже выглядит хорошо. Или см. Ответ BFree на этот вопрос .

0 голосов
/ 24 апреля 2009

Одна из вещей, которые я делаю с моим DataGridView, - это включение столбца ID из базы данных в скрытый столбец. У меня также есть столбец Button в представлении данных, и если вы нажмете кнопку, он получит RowID этой строки и отправит его в класс базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...