2
我試圖通過拖放功能實現一個ObjectListView。考慮下面的類: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);
}
}
}
如果我的問題沒有任何信息,請告訴我 - 謝謝!
Downvoter,請自圓其說。如果花時間分享我的解決方案在這裏被認爲是錯誤的,我肯定不會再犯這個錯誤。 – Jeff 2012-07-23 15:10:31
Upvoted因爲它幫助了我。 – 2014-01-28 05:00:10