2012-03-12 2 views
4

У меня есть listView и две кнопки (UP, DOWN), и я хочу переместить выбранный элемент вверх или вниз.
Я думал об обмене между выбранным элементом и верхним. Но код, который я пробовал, не имеет смысла, потому что индекс только для чтения.
также мин или сумма не owrk .. я не могу беспорядок с индексом вообще.Как изменить индекс элемента в списке?

private void btnDown_Click(object sender, EventArgs e) 
    { 
     listView1.SelectedItems[0].Index--; // It's ReadOnly. 
    } 


Так .. как же я позволить пользователю возможность изменять индекс ListViewItem как то, как VB давайте изменить эти индекса элемента [как в ПОС]

enter image description here

спасибо заблаговременно ...

+0

вы должны изменить порядок в источнике для списка – Carsten

+0

@ CarstenKönig Можете ли вы объяснить подробнее .. что порядок, в каком источнике .. я имею в виду немного код может помочь. –

+0

lol-code? как я должен создавать код, не видя ничего полезного с вашего кода? - Вы заполняете источник списка датой - я не вижу, как, но у вас есть *, - и это данные, где вы должны изменить порядок пунктов, которые вы хотите * переключили * – Carsten

ответ

13

Сначала вы должны связаться с remove the selected item, а затем повторно добавить его в новое положение.

Например, чтобы переместить элемент вверх на одну позицию:

var currentIndex = listView1.SelectedItems[0].Index; 
var item = listView1.Items[index]; 
if (currentIndex > 0) 
{ 
    listView1.Items.RemoveAt(currentIndex); 
    listView1.Items.Insert(currentIndex-1, item); 
} 
+1

это сработало .. полностью :) –

0

После является улучшение M4N ответа обрабатывать заказ повторно элемента в верхней части списка и сделать его в нижней части списка

int currentIndex = listView1.SelectedItems[0].Index; 
ListViewItem item = listView1.Items[currentIndex]; 
if (currentIndex > 0) 
{ 
    listView1.Items.RemoveAt(currentIndex); 
    listView1.Items.Insert(currentIndex - 1, item); 
} 
else 
{ 
    /*If the item is the top item make it the last*/ 
    listView1.Items.RemoveAt(currentIndex); 
    listView1.Items.Insert(listView1.Items.Count, item); 
} 
0

В случае наблюдаемых коллекций вы также можете позвонить: .Move (currentindex, newindex);

MSDN

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