Как удалить строку в DataGridView в языке c#

Удаление строки в DataGridView

Из этой статьи Вы узнаете, как удалить строку в DataGridView.

И так предположим, что у нас есть DataGridView (dgv), который содержит 4 строки (записи).

control datagridview

Давайте рассмотрим и разберем на простых примерах несколько самых распространённых задач связанных с удалением строк.

Удаление строки в DataGridView по индексу

В качестве первой задачи рассмотрим пример, в котором необходимо удалить строку в DataGridView по указанному в текстовом поле индексу.

Решить данную задачу можно несколькими способами, например, мы можем воспользоваться методом RemoveAt, который в качестве единственного параметра принимает индекс удаляемой строки. Не забывайте, что индекс первой строки всегда равен нулю!

И так давайте, например, удалим строку с индексом два.

dgv.Rows.RemoveAt(int.Parse(textBox1.Text));

результат

удаление строки

Удаление строки в DataGridView по значению

Во второй задаче нам потребуется удалить в DataGridView строку, которая содержит указанное в текстовом поле значение.

Например, рассмотрим простую задачу, в котором пользователь хочет удалить строку, в которой колонка lastname содержит значение (фамилию) Petrov.

foreach (DataGridViewRow row in dgv.Rows)
{
if (row.Cells["lastname"].Value.Equals(textBox1.Text))
{
dgv.Rows.RemoveAt(row.Index);  
break;
}
}

результат

найденное значение

Сначала, перебирая все строки, мы находим указанное пользователем значение, а затем, с помощью метода RemoveAt, уже знакомого нам по предыдущему примеру, удаляем полученную строку в DataGridView. При этом чтобы получить индекс текущей строки, мы используем свойство Index.

Так же не забывайте указывать оператор break, так как цикл, не смотря на то, что строка уже будет найдена и удалена, всё равно будет продолжен!

Удаление выделенной строки в DataGridView

И последняя задача, в которой нам необходимо удалить выделенную строку в DataGridView.

При решении данной задачи есть два важных момента, на которые стоит обратить внимание. Во-первых, по умолчанию выделение всей строки в DataGridView происходит только при нажатии на самый первый (левый) столбец.

удаление строки в datagridView

Если мы точно знаем, что пользователь будет использовать такой способ выделения строк, то мы можем удалить выделенную строку в DataGridView, например, воспользовавшись свойством SelectedRows.

В предыдущих примерах для удаления строк мы использовали метод RemoveAt, в этом примере рассмотрим метод Remove, который так же позволяет удалить любую строку в DataGridView, но при этом нам не нужно указывать индекс, а достаточно просто в качестве параметра передать текущую строку.

foreach (DataGridViewRow row in dgv.SelectedRows)
{
dgv.Rows.Remove(row);
}

результат

свойство SelectedRows

Но, многие пользователи не знают о выше приведенном способе и часто выделяют строку, просто нажимая на любую ячейку.

выделенная ячейка

В таком случае выше приведенное решение не подходит, так как нам теперь нужно отловить не выделенную строку, а выделенную ячейку. Это мы можем сделать, например следующим образом:

foreach (DataGridViewCell cell in dgv.SelectedCells)
{
dgv.Rows.RemoveAt(cell.RowIndex);
}

В результате у нас получается два метода для решения одной задачи.

На самом деле есть более удобное решение, которое позволяет решить сразу обе задачи. В DataGridView существует свойство CurrentRow, которое позволяет автоматически определить текущую строку, при чём не важно выделил строку пользователь, нажав на ячейку или на самый левый столбец.

Например, воспользуемся данным свойством и удалим, к примеру, выделенную третью строку.

if (dgv.CurrentRow != null)
{
dgv.Rows.Remove(dgv.CurrentRow);
}

результат

свойство CurrentRow

На этом всё, если есть какие-то вопросы, то оставляйте их в комментариях.

Читайте также:

7 комментариев

  1. restam says:

    Извиняюсь, у меня такой вопрос. Вот тут в примере указано как удалить строку, но строка удаляется только в DataGridView, можно ли потом как нибудь сохранить изменения, чтобы удаление произошло и в Базе Данных? заранее благодарю

  2. Veronika says:

    Спасибо!
    Статья очень мне помогла, четко и по делу ??

  3. Сергей says:

    что означает во втором примере dr?
    где его нужно объявить?

  4. Там row.Cells должно быть, исправил.

  5. Chizi.by says:
    for (int i=0; i < DGEmail.Rows.Count-1; i++)
    {
    if (DGEmail.Rows[i].Cells["Status"].Value.Equals("Send"))
    {
    DGEmail.Rows.RemoveAt(i--);
    }
    }

    &#8212; единственный пашуший код на удаление строк по ячейке мог на своем написать, но разницы нет, надеюсь вам пригодиться.
    А этот [код] не пашет

    foreach (DataGridViewRow row in dgv.Rows)
    {
    if (row.Cells["lastname"].Value.Equals(textBox1.Text))
    {
    dgv.Rows.RemoveAt(row.Index);
    break;
    }
    }
  6. А что именно в нём не &#171;пашет&#187;?

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*