ListView перемещение элементов
У меня есть еще одна проблема с ListView : (теперь мне нужно переместить элементы в группе (вверх, вниз, в начало, в конец), но ListView отображает перемещенные элементы всегда в конце.
Вот пример кода для перемещения элемента в начало:
if (1 == listView1.SelectedItems.Count)
{
ListViewItem item = listView1.SelectedItems[0];
ListViewGroup gp = item.Group;
int index;
index = item.Index;
if (index < listView1.Items.Count)
{
index = 0;
listView1.Items.Remove(item);
item.Group = gp;
listView1.Items.Insert(index, item);
}
}
Я попробовал google, чтобы найти какое-то решение, и я нашел кого-то еще (http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/838f90cd-33d8-4c81-9ed9-85220b511afe) у которого была такая же проблема, как и у меня, но его решение не является работа : (
Я рассматривал возможность использования ObjectListView, но я изменил ListView witch теперь поддерживает drag & drop с эффектом WinAmp, события onScroll, синхронизацию прокрутки и т. д.. и я не хочу потерять эти вещи : (
3 ответов:
Попробуйте это:
/// <summary> /// Move the given item to the given index in the given group /// </summary> /// <remarks>The item and group must belong to the same ListView</remarks> public void MoveToGroup(ListViewItem lvi, ListViewGroup group, int indexInGroup) { group.ListView.BeginUpdate(); ListViewItem[] items = new ListViewItem[group.Items.Count + 1]; group.Items.CopyTo(items, 0); Array.Copy(items, indexInGroup, items, indexInGroup + 1, group.Items.Count - indexInGroup); items[indexInGroup] = lvi; for (int i = 0; i < items.Length; i++) items[i].Group = null; for (int i = 0; i < items.Length; i++) group.Items.Add(items[i]); group.ListView.EndUpdate(); }
Моим автоматическим ответом на этот вопрос было бы проверить и посмотреть, работает ли он, если вы скажете
listView1.Items.Count - 1Потому что список индексируется с нулевым индексом, так что число на 1 больше, чем последний индекс)
Глядя на код, у него есть несколько проблем, которые вызывают у меня любопытство. Похоже, что может быть проблема в первой инструкции if. Если в списке элементов есть только 1 элемент, то его удаление и повторное добавление ничего не даст, независимо от того, куда вы его вставите. Я верю, что вы хотите
Кроме того, вы устанавливаете индекс на 0 сразу после получения его из интересующего вас элемента. Если предполагается, что код переместит его наверх, то Index=0 должен быть перемещен внутрь if заявление.
Не уверен, что это решит проблему...
Comments