Delphi (VCL) Generics и привязка данных?

Кто-нибудь знает, есть ли в Delphi XE (я имею в виду VCL) какие-либо классы Generic Collection, которые работают с элементами управления с поддержкой данных? Другими словами, существуют ли общие классы, такие как TObjectList‹>, которые можно присвоить TDataSource.DataSet или что-то подобное?

Спасибо.

Дэн


person Dan Thomas    schedule 21.05.2011    source источник


Ответы (2)


Да, вы можете, используя концепцию ObjectDataSet, которую, я думаю, вам придется реализовать самостоятельно на основе на связанном примере кода в качестве отправной точки.

Пример кода показывает, как объединить концепцию обычного неуниверсального TObjectList и TDataSet. Он использует RTTI для предоставления любого списка, который вы хотите прикрепить к нему, любого типа объекта. Он использует RTTI и не требует использования Generics, а требует наследования от TPersistent.

Плохая сторона этого в том, что я использовал его, и я никогда не буду использовать его снова. Получившийся код был беспорядочным, медленным, а модель ужасной. В следующий раз я бы воздержался от элементов управления, поддерживающих данные, и просто использовал бы контейнеры с ВИРТУАЛЬНЫМИ элементами управления, такими как VirtualTreeView и ExGridView.

Я не вижу причин, по которым вы не могли бы начать с приведенного выше кода в качестве основы и комбинировать дженерики с привязкой данных, но я вижу множество причин, по которым вы не должны этого делать.

person Warren P    schedule 21.05.2011
comment
Спасибо. У меня было ощущение, что ответ будет примерно таким, и я просто хотел убедиться, что не упускаю ничего очевидного. - person Dan Thomas; 24.05.2011

Чтобы иметь другое мнение:

  • См. работу Stefan Glienke. Он является автором многообещающего DSharp. Подробнее читайте в его блоге.
  • Укажите на DN4D (DotNet4Delphi).

Они оба могут использовать классы Generic Collection, как и ожидалось, с возможностью связывания, что делает предоставление данных для визуальных компонентов довольно простым.

person menjaraz    schedule 20.12.2011