gpt4 book ai didi

c# - ObjectListView 中的可重新排序的项目

转载 作者:太空宇宙 更新时间:2023-11-03 11:19:06 27 4
gpt4 key购买 nike

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

public class MyClass
{
public string Name { get; set; }
public MyClass(string name)
{
Name = name;
}
}

我的重新排序工作正常(但是它非常非常难看),但我似乎无法找到我应该如何重新排序我的 List<MyClass> OLV 显示的是什么?我尝试删除 OLV Selected Index 位置的 MyClass 对象,并在新位置插入,但这没有用。

如果您需要它,这里是我用来使 View 拖放工作的代码:

    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);
}
}
}

如果我的问题缺少任何信息,请告诉我 - 谢谢!

最佳答案

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

问题出在这一行:

olv.MoveObjects(index + 1, models);

正如我所说,我尝试在对象列表中使用 Insert 和 Remove,但这没有用 - 那是因为我忘记了 + 1 Insert 中的索引> 方法(仅当索引不为 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);

关于c# - ObjectListView 中的可重新排序的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11614658/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com