Как в datagridview удалить строку
Рейтинг (т): нет
очень простое задание но возникли трудности.
нужно сделать удаление записи из DataGridView по нажатию на кнопку.Удаление должно происходить так: сначала выделяем на DataGridView строку которую хотим удалить, а потом по нажатию на кнопку удаляем. я вроде написал. не знаю почему не работает? ничего не происходит. Добавление строки работает. посмотрите плиз
// Удаление записи
private void btnDelete_Click(object sender, EventArgs e)
if (this.dataGridView.SelectedRows.Count > 0 &&
this.dataGridView.SelectedRows[0].Index !=
this.dataGridView.Rows.Count — 1)
this.dataGridView.Rows.RemoveAt(this.dataGridView.SelectedRows[0].Index);
// Добавление записи
private void btnAdd_Click(object sender, EventArgs e)
this.dataGridView1.Rows.Add();
Сообщ. #2 , 13.01.10, 15:27
Full Member
Рейтинг (т): 35
&&this.dataGridView.SelectedRows[0].Index !=this.dataGridView.Rows.Count — 1
Сообщ. #3 , 13.01.10, 15:37
Full Member
Рейтинг (т): нет
нет не работает(
Сообщ. #4 , 13.01.10, 16:00
Full Member
Рейтинг (т): 22
Скорее всего, проблема в том, что на момент удаления не выделено ни одной строки Строка считается выделенной, если она выделена вся. Добиться этого можно, щелкнув на RowHeader слева от строки, либо установить DataGridView.SelectionMode = FullRowSelect.
Вот это:
&&this.dataGridView.SelectedRows[0].Index !=
this.dataGridView.Rows.Count — 1
Data Grid View. User Deleting Row Событие
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Происходит, когда пользователь удаляет строку из элемента управления DataGridView.
public: event System::Windows::Forms::DataGridViewRowCancelEventHandler ^ UserDeletingRow;
public event System.Windows.Forms.DataGridViewRowCancelEventHandler UserDeletingRow;
member this.UserDeletingRow : System.Windows.Forms.DataGridViewRowCancelEventHandler
Public Custom Event UserDeletingRow As DataGridViewRowCancelEventHandler
Тип события
Примеры
В следующем примере кода показано, как использовать UserDeletingRow событие для отмены удаления строк из DataGridView , если начальная строка баланса включена в выделенный фрагмент. Этот пример является частью более крупного примера, доступного в событии SelectionChanged .
private void DataGridView1_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e) < DataGridViewRow startingBalanceRow = DataGridView1.Rows[0]; // Check if the Starting Balance row is included in the selected rows if (DataGridView1.SelectedRows.Contains(startingBalanceRow)) < // Do not allow the user to delete the Starting Balance row. MessageBox.Show("Cannot delete Starting Balance row!"); // Cancel the deletion if the Starting Balance row is included. e.Cancel = true; >>
Private Sub UserDeletingRow(ByVal sender As Object, _ ByVal e As DataGridViewRowCancelEventArgs) _ Handles DataGridView1.UserDeletingRow Dim startingBalanceRow As DataGridViewRow = DataGridView1.Rows(0) ' Check if the starting balance row is included in the selected rows If DataGridView1.SelectedRows.Contains(startingBalanceRow) Then ' Do not allow the user to delete the Starting Balance row. MessageBox.Show("Cannot delete Starting Balance row!") ' Cancel the deletion if the Starting Balance row is included. e.Cancel = True End If End Sub
Комментарии
Это событие можно отменить, чтобы предотвратить удаление строк.
Дополнительные сведения об обработке событий см. в разделе Обработка и создание событий.
Как удалить строку из DataGridView, что бы после рефреша строка с таким ID больше не появлялась в списке?
Уточните вопрос. Напишите, как данные попадают в DataGridView. Они берутся из БД? Сделана привязка (binding)?
14 ноя 2015 в 18:08
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
если удалить все то так:
dataGridView1.Rows.Clear(); dataGridView1.Refresh();
если конкретную строчку то надо знать ее индекс
dataGridView1.Rows.RemoveAt(индекс строки); dataGridView1.Refresh();
можно удалить и имея объект row
dataGridView1.Rows.Remove(row); dataGridView1.Refresh();
Отслеживать
ответ дан 13 ноя 2015 в 11:02
2,508 2 2 золотых знака 12 12 серебряных знаков 25 25 бронзовых знаков
после такого удаления когда снова запускаю программу удаленная строка снова появляется,нужно что бы не появился
13 ноя 2015 в 16:37
дополнительно вам надо ее еще и из базы удалить. Необходимо знать уникальный идентификатор записи в базе (обычно Id), выполнить запрос на удаление
13 ноя 2015 в 16:39
datagridview.databind();
вставляешь в любой серверный обработчик
Отслеживать
51.4k 86 86 золотых знаков 267 267 серебряных знаков 505 505 бронзовых знаков
ответ дан 13 ноя 2015 в 11:50
one__for__one one__for__one
13 3 3 бронзовых знака
а по конкретнее?
13 ноя 2015 в 16:38
Постарайтесь писать более развернутые ответы. Поясните, на чем основано ваше утверждение?
14 ноя 2015 в 7:34
for (int i = 0; i < arr.Length; i++) < for (int j = 0; j < arr.Length; j = j++) < dataGridView2.Rows[i].Cells[j].Value = null; >>
Отслеживать
ответ дан 7 мая 2023 в 0:29
Алберт Скоростяк Алберт Скоростяк
1 1 1 бронзовый знак
- c#
- winforms
- datagridview
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.8.3130
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как удалить выбранную строку в Datagrid?

Anton_repr, вопрос абсолютно нормальный, затем и здесь чтобы узнавать новое и делиться опытом.
После удаления из DataGrid вы хотите одновременно удалить и из базы, или синхронизацию делаете после завершения работы?
Anton_repr @Anton_repr Автор вопроса
Foggy Finder, мне необходимо одновременно удалить и из базы, и из DataGrid

Foggy Finder @FoggyFinder
или, вам придется, после каждого изменения извлекать актуальную информацию из БД.
То есть для каждой таблицы создавать классы, например:
public class Ingredient < public int ID < get; >public string Name < get; >public Ingredient(int id, string name) < Name = name; >>
и тогда нужно будет изменить метод FillGrid на IEnumerable GetIngedients().
Ingredients.Clear(); foreach(var ingredient in GetIngredients()) Ingredients.Add(ingredient);
но лучше поискать метод-расширения AddRange для ObservableCollection чтобы шустрее работало.

Anton_repr, склоняюсь к применению Entity Framework как написал Foggy Finder выше, но у меня получилось решить вашу задачу