【发布时间】:2012-07-23 14:33:30
【问题描述】:
我正在尝试对 ObjectListView 实现重新排序的拖放功能。考虑以下类:
public class MyClass
{
public string Name { get; set; }
public MyClass(string name)
{
Name = name;
}
}
我得到了重新排序的工作(但是它非常非常难看),但我似乎无法找到我应该如何重新排序我的 List<MyClass> 这是 OLV 显示的内容?我尝试在 OLV Selected Index 的位置移除 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);
}
}
}
如果我的问题缺少任何信息,请告诉我 - 谢谢!
【问题讨论】:
标签: c# drag-and-drop objectlistview