如何在listview中更改项目索引?

时间:2012-03-12 06:53:44

标签: c# winforms listview

我有一个listView和两个按钮(向上,向下),我想向上或向下移动所选项目。
我已经考虑过在所选项目和上面的项目之间进行交换..但是我尝试的代码......没有意义,因为索引是只读的。
还有地雷或总和不欠人。我根本不能搞乱指数。

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


那么......我如何让用户能够改变ListViewItem索引,就像VB让我们改变这些项目索引一样[如图中所示]

enter image description here

提前感谢...

3 个答案:

答案 0 :(得分:14)

您必须先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);
}

答案 2 :(得分:0)

如果是可观察的集合,你也可以调用:.Move(currentindex,newindex);

MSDN