C# ObjectListView中的可重排序项

C# ObjectListView中的可重排序项,c#,drag-and-drop,objectlistview,C#,Drag And Drop,Objectlistview,我正试图通过拖放功能实现对ObjectListView的重新排序。考虑下面的类: public class MyClass { public string Name { get; set; } public MyClass(string name) { Name = name; } } 我得到了重新排序工作(但它是非常非常丑陋),但我似乎无法找到我应该如何重新排序我的列表,这是OLV显示的内容?我尝试在OLV选定索引的位置删除MyClass对象,

我正试图通过拖放功能实现对ObjectListView的重新排序。考虑下面的类:

public class MyClass
{
    public string Name { get; set; }
    public MyClass(string name)
    {
        Name = name;
    }
}
我得到了重新排序工作(但它是非常非常丑陋),但我似乎无法找到我应该如何重新排序我的
列表
,这是OLV显示的内容?我尝试在OLV选定索引的位置删除MyClass对象,并在新位置插入,但没有成功

如果您需要,下面是我用来让视图拖放工作的代码:

    private void objectListView1_ItemDrag(object sender, ItemDragEventArgs e)
    {
        DoDragDrop(((OLVListItem)e.Item).RowObject, DragDropEffects.Move);
    }

    private void objectListView1_DragEnter(object sender, DragEventArgs e)
    {
        e.Effect = e.Data.GetDataPresent("Cheeseburger.MyClass") ? DragDropEffects.Move : DragDropEffects.None;
    }

    private void objectListView1_DragOver(object sender, DragEventArgs e)
    {
        e.Effect = DragDropEffects.Move;
        var olv = (sender as ObjectListView);
        if(e.Data.GetDataPresent("Cheeseburger.MyClass"))
        {
            var pt = olv.PointToClient(new Point(e.X, e.Y));

            var index = olv.InsertionMark.NearestIndex(pt);
            // Debugging
            Text = index.ToString();
            var node = olv.GetItem(index);

            if (node != null && index != -1)
            {
                node.EnsureVisible();
            }
        }
    }


    private void objectListView1_DragDrop(object sender, DragEventArgs e)
    {
        e.Effect = DragDropEffects.Move;
        var olv = (sender as ObjectListView);
        if (e.Data.GetDataPresent("Cheeseburger.MyClass"))
        {
            var draggedObject = e.Data.GetData("Cheeseburger.MyClass") as MyClass;
            var pt = olv.PointToClient(new Point(e.X, e.Y));

            var index = olv.InsertionMark.NearestIndex(pt);
            var node = olv.GetItem(index);

            if (node != null && index != -1)
            {
                var models = new List<MyClass>() { draggedObject };
                olv.MoveObjects(index + 1, models);
            }
        }
    }
private void objectListView1\u ItemDrag(对象发送方,ItemDragEventArgs e)
{
DoDragDrop(((OLVListItem)e.Item).RowObject,DragDropEffects.Move);
}
私有无效对象列表视图1_DragEnter(对象发送方,DragEventArgs e)
{
e、 Effect=e.Data.GetDataPresent(“Cheeseburger.MyClass”)?DragDropEffects.Move:DragDropEffects.None;
}
私有无效objectListView1_DragOver(对象发送方,DragEventArgs e)
{
e、 效果=DragDropEffects.Move;
var olv=(发送方作为ObjectListView);
if(e.Data.GetDataPresent(“Cheeseburger.MyClass”))
{
var pt=olv.PointToClient(新点(e.X,e.Y));
var指数=olv.InsertionMark.NearestIndex(pt);
//调试
Text=index.ToString();
var节点=olv.GetItem(索引);
if(节点!=null&&index!=-1)
{
node.EnsureVisible();
}
}
}
私有无效objectListView1_DragDrop(对象发送方,DragEventArgs e)
{
e、 效果=DragDropEffects.Move;
var olv=(发送方作为ObjectListView);
if(e.Data.GetDataPresent(“Cheeseburger.MyClass”))
{
var draggedObject=e.Data.GetData(“Cheeseburger.MyClass”)作为MyClass;
var pt=olv.PointToClient(新点(e.X,e.Y));
var指数=olv.InsertionMark.NearestIndex(pt);
var节点=olv.GetItem(索引);
if(节点!=null&&index!=-1)
{
var models=new List(){draggedObject};
olv.MoveObjects(索引+1,模型);
}
}
}

如果我的问题缺少任何信息,请让我知道-谢谢

再一次,当问题被提出时,答案是显而易见的

问题在于这一行:

olv.MoveObjects(index + 1, models);
正如我所说的,我尝试在对象列表上使用Insert和Remove,但这不起作用-那是因为我忘记了在
Insert
方法中使用
+1
索引(只有当索引不是0时,否则在列表中的第一项上拖放时会出错)

以下是该部分的修改代码:

                var selIndex = olv.SelectedIndex;
                var models = new List<MyClass>() { draggedObject };
                if (index != 0) index++;
                olv.MoveObjects(index, models);
                MyClasses.Insert(index,draggedObject);
                MyClasses.RemoveAt(selIndex);
var selfindex=olv.SelectedIndex;
var models=new List(){draggedObject};
如果(索引!=0)索引++;
olv.移动对象(索引、模型);
插入(索引,draggedObject);
MyClasses.RemoveAt(selIndex);

Downvoter,请说明理由。如果花时间分享我的解决方案在这里被认为是错误的,我肯定不会再犯同样的错误。