#c# #list #listview
#c# #Список #listview
Вопрос:
Я немного неясен в следующем, поэтому, чтобы прояснить ситуацию, моя конечная цель — создать кнопку для удаления значения, отображаемого в listview, значение является элементом списка.
Это то, чего я хочу…
studentList.Remove(listView1.SelectedIndices);
refreshList();
конечно, если бы это сработало, я был бы на небесах, но, конечно, это выдает ошибки…
Список является private List<Student> studentList = new List<Student>()
он сгенерирован из другой формы Windows.
У меня возникла проблема с удалением элементов из списка / viewlist, который я использую.
Вот код, который продолжает выдавать ошибки:
private void buttonDelete_Click(object sender, EventArgs e)
{
// studentList.RemoveAt(listBoxStudent.SelectedIndex);
for (int i = 0; i < listView1.Items.Count; i )
{
studentList.RemoveAt(listView1.Items[i].Selected));
i--;
}
refreshList();
}
Значения помещаются в listview правильно, но, похоже, я не могу найти способ удалить значения из listview и списка вместе ( refreshlist()
очищает и повторно заполняет listview в соответствии со списком studentList
)
private void refreshList()
{
listView1.Items.Clear();
foreach (Student stu in studentList)
{
string[] filler = new string[5];
filler[0] = stu.Name.ToString();
filler[1] = stu.Residency.ToString();
filler[2] = stu.Credits.ToString();
filler[3] = stu.Tuition.ToString();
listView1.Items.Add(stu.Id.ToString()).SubItems.AddRange(filler);
listView1.View = View.Details;
}
}
редактировать: добавлено refreshlist()
по запросу.
Комментарии:
1. Можете ли вы добавить свой код refreshlist ()? Кроме того, зачем использовать цикл for для удаления элемента? Тем более, что в вашем цикле вы отрицаете свою переменную i, чтобы она не менялась?
2. добавлен refreshlist (), я действительно не уверен, какой наилучший способ удалить элементы, однако, поскольку это listview, в нем может быть выбрано несколько элементов, поэтому, насколько я понимаю, потребуется цикл. Все еще новичок в языке.
3. какова ваша цель с этим первым циклом, который содержит
studentList.RemoveAt(..)
— вы просто хотите удалить выбранный элемент? Если да, то почему цикл?4. Я просто хочу удалить выбранный элемент, я не уверен, как настроить таргетинг на выбранные индексы в listview…
Ответ №1:
Крис,
Чувак, просто удали объект из списка (забудь RemoveAt (index)), затем обнови представление… он будет (или, по крайней мере, должен) извлекать изменения из «модели» (т. Е. списка студентов).
Метод List.Remove:http://msdn.microsoft.com/en-us/library/cd666k3e.aspx
Приветствия. Кит.
Комментарии:
1. Проблема заключается в удалении элемента из списка по выбранному индексу … он выдает ошибки, когда я пытаюсь выбрать индекс.
2. понял, что ваш ответ наиболее релевантен.
Ответ №2:
попробуйте изменить свой цикл на
for(int i = studentList.Items.Count -1; i>=0; i--)
{
if(studentList.Items[i].Selected == true)
studentList.Items[i].Remove();
}
или другим способом
foreach (ListViewItem lvi in studentList.Items)
{
if (lvi.Selected == true)
lvi.Remove();
}
Комментарии:
1. 1 Инвертирование цикла — это аккуратный способ обойти проблему с пропуском индекса.
2. Удалит ли удаление элемента ListViewItem учащегося из базового списка учащихся? Да: это вопрос. Очевидно, я подозреваю, что это не ОЧЕНЬ ХОРОШИЕ новости, но я не знаю наверняка.
3. возможно, я недостаточно четко сформулировал свой вопрос: (Я пытаюсь удалить из списка учащихся выбранные элементы в ListView. Я не пытаюсь удалить элемент из ListView, потому что это просто повторно заполнило бы вызов refreshlist ().
Ответ №3:
Обычно вы не пытались бы манипулировать обоими. Измените базовый источник данных (в вашем случае StudentList), затем обновите ListView. Если вы измените свой список учащихся, чтобы использовать ObservableCollection
, это фактически обновит пользовательский интерфейс для вас.
Кроме того, если тип данных вашей коллекции поддерживает IComparable
, вы должны просто иметь возможность использовать ListView1.Remove(), а не RemoveAt() .
Комментарии:
1. Как мне удалить выбранный элемент в ListView? Список обновления будет обрабатывать ListView, мне просто нужно знать, как настроить таргетинг на выбранный элемент для удаления в StudentList…
Ответ №4:
Вы изменяете коллекцию, по которой пытаетесь выполнить итерацию. Как только вы удалили первый элемент, вы изменили список, поэтому цикл for выдаст вам сообщение об ошибке. Приведенный пример, который повторяется в обратном направлении (i —), является одним из способов решения проблемы.
Комментарии:
1. Вы имеете в виду, что объяснение того, почему вы получаете ошибку, не помогло или повторение в обратном направлении по коллекции не помогло?
2. повторение обратных слов по коллекции. Теперь у меня все работает, хотя спасибо.