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, синхронизацию прокрутки и т. д.. и я не хочу потерять эти вещи : (

712   3  

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

    Ничего не найдено.