2013-11-13 18 views
0

Я использую ObjectListView с флажками, я хотел бы запустить функцию на выбранных элементах, чтобы удалить их. Поэтому я пробовал этот метод, но он не работал:Как получить список объектов из ObjectListView C#?

private List<Matricule> matrs; 
private void button1_Click(object sender, EventArgs e) 
     { 
      //List<Song> s = this.olvSongs.CheckedObjects.Count; 
      //MessageBox.Show(this.olvSongs.CheckedItems.Count + " " + this.olvSongs.CheckedObjects.Count); 

      string s = ""; 
      foreach (var item in olvMatrs.SelectedItems) 
      { 
       matrs.Remove((Matricule)item); 
      } 
this.olvSongs.SetObjects(matrs); 
     } 

как я могу выполнить эту задачу.

+3

«но это не работает» не помогает. Сообщение об ошибке? Ожидаемый фактический результат? ...и т.д. – ken2k

+0

нет сообщения об ошибке, просто ничего не произошло, когда я нажму кнопку :( –

+0

Rev дал хороший ответ. Вы должны отметить это как ответ на свой вопрос. – Grammarian

ответ

1

Хорошо, я вижу, что вы не показываете код, где он добавляет что-либо к matrs, поэтому мы, безусловно, не можем найти полезный исходный код. Кроме того, мы не знаем, что такое Matricule, но я могу довольно хорошо догадаться, что вы уже поделили.

Я считаю, что 1 из 3 вещей должно происходить, если matrs не получает никаких предметов.

1: Вы уверены, что ваша функция привязана к событию нажатия кнопки? вы можете установить точку останова в функции, чтобы убедиться, что она даже выполняется. или вы можете добавить строку, чтобы показать сообщение MessageBox.Show("Yes", this.Text); внутри этого метода button1_Click().

2: если функция выполняется (так что это не вариант № 1), то мое второе соображение состоит в том, что, возможно, (Matricule)item не находится в списке матриц, который можно удалить. что функция «Удалить» возвращает логическое значение, указывающее, действительно ли удаление удалило что-то или нет.

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

Я считаю, что вы думаете, что это №2, но, возможно, захотите устранить возможность других двух простых вариантов (# 1 и # 3). если вы делаете вывод, что это №2, поэтому вариантов №1 и №3 не происходит, то вот что происходит с удалением объектов путем ссылки на эти объекты: это легко приводит к проблемам, как то, что у вас есть. так легко получить код, который фактически пытается удалить новый объект с теми же свойствами, что и другой объект, который находится в List. чистый способ, которым я решаю это, - попытаться удалить элементы по индексу #, а не ссылку на сам объект. но вы даже не захватываете объект, который нужно удалить из самого списка. вы захватываете этот объект из olvMatrs, который является другим списком объектов. мое лучшее предположение из информации, которую вы поделили, состоит в том, что именно поэтому она не работает, если вы посмотрите глубже, что вы пытаетесь удалить объект, которого нет в списке, поэтому ничего не удаляется. это непростая ошибка. я знаю только потому, что я сделал это еще до того, как научился очень осторожно относиться к этому.

+0

, если это было полезно для вас, пожалуйста, проголосуйте. (Я надеюсь построить моя репутация, так как у меня пока мало.) –

+0

спасибо @Shawn за ваш ответ, я использовал olvMatrs.CheckedObjects, и он работает –

+0

спасибо, поэтому он пытался удалить неправильный объект (мой № 2 выше) и Rev1 .0 объясняет проблему более четко тогда. Спасибо за обратную связь, Sidaoui. И спасибо за лучшую ясность, Rev! –

2

Вы говорите о флажках. Линия

foreach (var item in olvMatrs.SelectedItems) 

Итерации через ITEMS, ВЫБРАННЫЕ, НЕ ПРОВЕРЕННЫЕ! Это действительно то, что вы хотите? Чтобы получить проверяемых объектов использовать

objectListView1.CheckedObjects 

Если вы действительно хотите получить выбранные объекты, не используйте Selected * товары *. Использовать

objectListView1.SelectedObjects; 

вместо этого. Вот что такое OLV. Вы хотите работать с объектами, а не с ListViewItems.

Если вы решили, что вы хотите удалить, не удалить объекты из вашего списка, но прямо с вашего ObjectListView использованием

objectListView1.RemoveObjects(myObjects); 

Вы должны, вероятно, (пере) чтения this. Особенно раздел «Переключение умственного снаряжения - это важно. Вам нужно это понять».

Смежные вопросы