C #, алгоритм переупорядочения DragDrop - PullRequest
0 голосов
/ 21 ноября 2011

У меня есть список объектов в C #, которые имеют свойство под названием «Последовательность».Этот список затем привязывается к 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 ]

2 голосов
/ 21 ноября 2011

но я думаю, что это добавит некоторых накладных расходов.

Очень, очень мало.

Преимущество в том, что не требуется никакой магии.

0 голосов
/ 21 ноября 2011

Посмотрите, сможете ли вы избежать хранения 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});
}
...