WPF DataGrid Удалить выбранные элементы - PullRequest
3 голосов
/ 18 июня 2011

Недавно я работал над проектом, который импортирует данные программным способом в WPF DataGrid.

Я почти закончил с проектом, но я упустил кнопку для удаления выбранных ячеек ивот где я застрял!

Я написал этот код, используя мои базовые знания о DataGrids:

var grid = dataGrid1;
if (grid.SelectedIndex >= 0)
 {
   for (int i = 0; i <= grid.SelectedItems.Count; i++)
   {
      grid.Items.Remove(grid.SelectedItems[i]);
   };
 }

Работает нормально при удалении только выбранного элемента, такого как CurrentItem, но это не такудалите больше 2 выбранных элементов!

DataGrid, который у меня есть, должен содержать не менее 100 элементов.Я добавил опцию удалить все, но это также необходимо.

Я буду благодарен, если кто-нибудь даст мне решение.

Ответы [ 8 ]

6 голосов
/ 18 июня 2011

Удаляя выбранный элемент, вы меняете коллекцию SelectedItems. Сначала вы должны скопировать его, а затем начать удаление.

3 голосов
/ 24 апреля 2015

Это также хорошо сработало для меня.

while (dataGrid1.SelectedItems.Count > 0){
  dataGrid1_item_source.Rows.RemoveAt(dataGrid1.SelectedIndex);
}
0 голосов
/ 30 января 2019
Do While dgData.SelectedItems.Count > 0
 dgData.SelectedItem.Row.Delete()
Loop
0 голосов
/ 27 июля 2015

У меня стек с той же проблемой, что и у автора.И нашел довольно красивое (я думаю) решение.

И поэтому главная проблема в том, что SelectedItems динамический, и когда вы удаляете одну строку, она снова пересчитывается.

Итак, мой код выглядит так:

for (int i = -datagrid1.SelectedItems.Count; i < datagrid1.SelectedItems.Count; i++)
        {
            datagrid1.SelectedItems.RemoveAt(datagrid1.SelectedIndex);
        }

Итак, каждый раз, когда цикл for выполняет шаг 1, datagrid1.SelectedItems.Count уменьшается на 1, а переменная i увеличивается,

0 голосов
/ 16 апреля 2015

Цикл while с использованием SelectedItem вместо SelectedIndex

while (dataGrid1.SelectedItems.Count > 0){
  if (dataGrid1.SelectedItem == CollectionView.NewItemPlaceholder)
      dataGrid1.SelectedItems.Remove(grid.SelectedItem);
  else
      dataGrid1.Items.Remove(dataGrid1.SelectedItem);
}
0 голосов
/ 21 мая 2014

Это сработало для меня ...

if (DataGrid1.SelectedItem != null)
        {
            ((DataRowView)(DataGrid1.SelectedItem)).Row.Delete();
        }
0 голосов
/ 13 мая 2013

Это сработало для меня ...

while (dataGrid1.SelectedItems.Count > 0){
  dataGrid1_item_source.Rows.RemoveAt(dataGrid1.SelectedIndex);
}
0 голосов
/ 18 июня 2011

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

var grid = dataGrid1;
var mygrid = dataGrid1
if (grid.SelectedIndex >= 0)
{
  for (int i = 0; i <= grid.SelectedItems.Count; i++)
  {
    mygrid .Items.Remove(grid.SelectedItems[i]);  
   };
}

grid = mygrid;
...