C#,DragDrop重新排序算法

时间:2011-11-21 10:13:30

标签: c# datagridview drag-and-drop

我在C#中有一个对象列表,它有一个名为'Sequence'的属性。然后将此列表绑定到DataGridView,按此序列排序。

用户可以拖放行 - 所以如果我们有以下内容:

Name,Sequence 
Test1,1 
Test2,2
Test3,3 
Test4,4 
Test5,5

将'Test1'拖到'Test3'和'Test4'之间应该修改任何有效的序列:

Name,Sequence 
Test2,1 
Test3,2
Test1,3 
Test4,4 
Test5,5

我无法弄清楚拖放行时用于更新列表的算法。一种简单的方法是循环遍历网格中的所有行,并将序列更新为行索引+ 1,但我认为这会增加一些开销。

2 个答案:

答案 0 :(得分:2)

  

但我认为这会增加一些开销。

非常非常少。

它的好处是不需要任何魔法。

答案 1 :(得分:0)

看看你是否可以避免将Sequence与对象一起存储,否则它将永远不会出现。在枚举容器时,您可以将对象与其序列配对以供下游使用:

class MyData {
    string Name {get; set;}
}
class DataWithSequence {
    MyData Data {get;set;}
    int Sequence{get;set;}
}
...
IList<MyData> list = new List<MyData>();
IEnumerable<DataWithSequence> GetData() {
    return list.Select((d,i)=> new DataWithSequence {Data=d, Sequence=i+1});
}