Как я могу отсортировать TList в Delphi по произвольному свойству объектов, которые он содержит?

У меня есть TList. Он содержит коллекцию однотипных объектов. Эти объекты являются потомками TPersistent и имеют около 50 различных опубликованных свойств.

В моем приложении пользователь может выполнить поиск этих объектов, и результаты поиска отображаются в TDrawGrid, причем отображаемые определенные столбцы основаны на свойствах, в которых выполняется поиск. Например, если пользователь выполняет поиск по запросу «счет-фактура», в таблице результатов отображается столбец «счет-фактура». Я хотел бы позволить пользователю сортировать эту сетку. Проблема, конечно, заключается в том, что я не знаю заранее, какие столбцы находятся в сетке.

Обычно для сортировки TList я просто создаю функцию, например SortOnName (p1, p2) и вызовите метод TList sort () . Я' Я бы хотел пойти еще дальше и найти способ передать имя свойства методу сортировки и использовать RTTI для сравнения.

Я мог бы, конечно, создать 50 различных методов сортировки и просто использовать их. Или установите переменную глобально или как часть класса, выполняющего всю эту работу, чтобы указать методу сортировки, по чему выполнять сортировку. Но мне было любопытно, есть ли у кого-нибудь из профессионалов Delphi другие идеи о том, как это реализовать.

7
задан Lieven Keersmaekers 16 September 2010 в 08:06
поделиться