Windows forms datagridview удалить строку

Обновлено: 06.07.2024

У меня есть DataGridView и Button . Если строки выбраны, я хочу удалить их, нажав кнопку. Я попробовал пару команд вроде RemoveAt , SelectedRows и т.д., Но ничего не получилось. Как я могу это решить?

Я попробовал что-то вроде:

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

Пожалуйста, покажите, что вы пробовали, даже если это не сработало. Тогда мы знаем проблему и можем помочь решить ее. Обратите внимание, что если вы заполнили сетку с использованием источника данных, вы можете обновить этот источник, и сетка автоматически обновится.

4 ответа

Если вы просто хотите удалить выбранные строки из DataGridView это должно сделать это:

Ваш код не работал, потому что вы использовали RemoveAt(rows) но RemoveAt принимает только индекс строки, которую вы хотите удалить. Вы передаете ему DataGridViewSelectedRowCollection . Вы можете получить индекс строки с помощью DataGridViewRow.Index как показано выше.

Возможно, вы захотите добавить замечание, почему это работает без указания «невозможно изменить итеративную коллекцию». Интересно. Спасибо, что выкопали это. ListView делает то же самое. OTOH, мне кажется, что ListBox делает то же самое, но не позволяет перечислять коллекцию и изменять ее. @TaW: но вы могли бы использовать ListView.SelectedIndices -collection, не так ли? Да, это работает для Listbox. В любом случае ListView работает в обоих направлениях.

вы можете программно найти строку, которую вы пытаетесь выбрать:

затем удалите выбранную строку:

если вы используете список моделей, следующий код может помочь:

Попробуйте это, надеюсь, что это поможет

1. Чтобы включить удаление, установите для параметра AutoGenerateDeleteButton значение true и укажите команду delete в SqlDataSource.

3. Мы должны вызвать эту функцию Javascript в событии OnClientClick для удаления LinkButton.

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

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

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

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

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

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

И так давайте, например, удалим строку с индексом два.
dgv.Rows.RemoveAt(int.Parse(textBox1.Text));
результат

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

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

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

27923

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

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

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

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

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

27924

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

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

27925

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

27926

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

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

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

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

27927

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

Данный элемент управления аналогичен компоненту TStringGrid в системе визуальной разработки приложений.

После размещения на форме, система создает объект (переменную) с именем dataGridView1 . С помощью этого имени можно программно оперировать методами и свойствами этого элемента управления.

Рис. 1. Элемент управления dataGridView1 и окно Properties со свойствами

2. Можно ли использовать DataGridView непосредственно без связывания его с базой данных?

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

3. Как программно задать размеры DataGridView ? Свойства Width , Height

Для задания размеров DataGridView используются свойства Width и Height .

4. Какие виды данных могут быть представлены в ячейках DataGridView ?

Виды данных, которые могут быть представлены в ячейках dataGridView :

  • dataGridViewButtonColumn . Ячейки представлены в виде кнопок типа Button ;
  • dataGridViewCheckBoxColumn . Ячейки представлены элементами управления типа CheckBox , которые позволяют выбирать несколько вариантов (опций) из набора предложенных;
  • dataGridViewComboBoxColumn . Ячейки представлены элементами управления типа ComboBox , предназначенных для выбора одного из нескольких вариантов;
  • dataGridViewImageColumn . Ячейки таблицы есть изображениями типа Image;
  • dataGridViewLinkColumn . Ячейки таблицы представлены ссылками;
  • dataGridViewTextBoxColumn . Этот вариант предлагается по умолчанию при добавлении (создании) нового столбца. В этом случае ячейки таблицы представлены в виде полей ввода. Это позволяет вводить данные в таблицу как в матрицу.
5. Добавление столбца программным путем

Добавить столбец в dataGridView можно:

  • с помощью специального мастера;
  • программным путем.

Столбцы в dataGridView организованы в виде коллекции Columns типа DataGridViewColumnCollection. Чтобы добавить столбец программным путем используется метод (команда) Add из коллекции Columns.

Метод Add имеет 2 варианта реализации:

  • DataGridViewColumn – тип System.Windows.Forms.Column который добавляется;
  • ColumnName – название, по которому будет осуществляться обращение к столбцу из других методов;
  • HeaderText – текст, который будет отображаться в заголовке столбца.

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

В реальных программах название столбца и его заголовка получаются из других элементов управления, например TextBox .

Для вставки столбца используется метод Insert , который имеет следующее объявление

Вызов этого метода из программного кода аналогичен методу Add .

6. Как программно реализовать удаление столбца? Методы Remove() и RemoveAt()

Чтобы удалить столбец используется один из двух методов из коллекции Columns :

  • метод RemoveAt() – удаляет столбец по заданному индексу в коллекции;
  • метод Remove() – удаляет столбец по его имени.

Общий вид метода RemoveAt() :

  • index – заданный индекс в коллекции. Индексы нумеруются с 0.
  • ColumnName – название столбца (но не название заголовка столбца), которое задается в методе Add() первым параметром. Столбцы в коллекции могут иметь одинаковые значения ColumnName . Если при вызове метода Remove() , столбца с именем ColumnName нет, то генерируется исключительная ситуация.

Фрагмент кода удаления столбца с помощью метода RemoveAt() :

7. Программное добавление строки. Метод Add()

Добавлять строку можно одним из двух способов:

  • путем непосредственного ввода с клавиатуры;
  • программным путем.

Строки в DataGridView организованы в виде коллекции Rows типа dataGridViewRowCollection .

Ниже приведен фрагмент метода, добавляющего 2 произвольные строки в таблицу

8. Программное удаление строки. Методы Remove() и RemoveAt()

Для удаления строки используется один из двух методов:

  • метод RemoveAt() – удаляет строку по заданному индексу;
  • метод Remove() – удаляет строку, которая есть входным параметром типа DataGridViewRow.

Фрагмент кода удаления строки имеет вид:

9. Задание текста заголовка в заданном столбце программным путем

Чтобы задать текст заголовка в заданном столбце используется свойство HeaderText . Фрагмент кода установки текста заголовка в столбце с индексом 0 имеет вид:

10. Установка выравнивания заголовка в заданном столбце программным путем

Выравнивание заголовка в столбце задается с помощью свойства HeaderCell.Style.Alignment .

Фрагмент кода установки выравнивания в заголовке столбца с индексом 0:

11. Установка шрифта заголовка в столбцах программным путем

Для установки шрифта в заголовках столбцов используется свойство ColumnHeadersDefaultCellStyle . В этом свойстве используется свойство Font .

Во фрагменте кода создается шрифт Arial , имеющий размер 12 и курсивное начертание.

12. Установка цвета шрифта заголовков программным путем

Чтобы задать цвет шрифта заголовков программным путем нужно использовать свойство ColumnHeaderDefaultCellStyle . В этом свойстве есть свойства ForeColor и BackColor .

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

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

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

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

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

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

И так давайте, например, удалим строку с индексом два.
dgv.Rows.RemoveAt(int.Parse(textBox1.Text));
результат

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

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

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

datagridview c удалить строку

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

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

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

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

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

datagridview c удалить строку

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

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

datagridview c удалить строку

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

datagridview c удалить строку

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

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

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

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

datagridview c удалить строку

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

Сейчас разрабатываю приложение, которое работает с базой данных и производит вывод информации в элемент DataGridView . И на одном из этапов разработки мне понадобилось очистить весь DataGr >

Начнем с того, что метод Clear() не работает.

Тогда на помощь приходит цикл:

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

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

Но сейчас я бы предпочел получить BindingSource и очистить его.

Вот так нужно очищать DataGr >Clear() не срабатывает. Вот такой своеобразный клининг получился.

Идея состоит в том, что строка, выбранная при удалении, удаляется из datagridview, базы данных, а затем обновляется datagridview. Я предполагаю, что это должно быть сделано с SQL, но как бы вы связали это sqlcommand текста типа с кодом удаления с этой конкретной строкой? База данных состоит из одной отдельной таблицы, и привязка к ней привязана.

По какой-то причине datagridview не будет обновляться, хотя я скопировал код обновления из кнопки добавления, которая работает. Но он удаляет запись из базы данных.

Если вы разрешаете только один выбор в DataGridView, вы можете сделать это.

Скажем, что первый столбец в DataGridView является семенем идентификации строки в базе данных.

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

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

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

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

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

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

И так давайте, например, удалим строку с индексом два.
dgv.Rows.RemoveAt(int.Parse(textBox1.Text));
результат

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

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

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


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

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

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

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

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


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

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


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


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

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

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

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


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

Сейчас разрабатываю приложение, которое работает с базой данных и производит вывод информации в элемент DataGridView . И на одном из этапов разработки мне понадобилось очистить весь DataGr >

Начнем с того, что метод Clear() не работает.

Тогда на помощь приходит цикл:

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

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

Но сейчас я бы предпочел получить BindingSource и очистить его.

Вот так нужно очищать DataGr >Clear() не срабатывает. Вот такой своеобразный клининг получился.

У меня есть метод, который хранит каждую строку в gridview в базе данных, а затем, если сохранение выполнено успешно, удаляет строку; но если это не удастся (не может быть сохранено в db), он не удаляет строку. К сожалению, я не могу заставить строку-удаление работать правильно.

Это мой текущий код:

Я также пробовал:

Но это падает на полпути, потому что индекс Rows постоянно меняется каждый раз, когда строка удаляется.

Как я могу это достичь? Как удалить строку, если сохранение выполнено успешно, но сохраните ее, если есть ошибка?

3 ответа

Пусть это поможет:

1] Убедитесь, что correctSave изменяется правильно.

2] Отменить поток цикла, Looping backward позволяют удалить строку, обработанную циклом, не влияя на индекс следующей строки для обработки.

3] Использовать CView.dataGridView1.Rows.RemoveAt(rows);

Вы должны отсортировать removeRows в порядке убывания.

Затем используйте цикл foreach

Таким образом, переиндексация не влияет на удаление.

Попытайтесь заполнить сбор строк для удаления с помощью DataGridViewRow не с индексом. Это работает для меня.

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