-
Приветствую! Написал универсальный обработчик для сортировки датасета в гриде по клику на заголовок.
ds := TDBGridEh(Sender).DataSource.DataSet;
if TDBGridEh(Sender).Columns[ACol].Title.SortMarker = smUpEh then
begin
TADODataSet(ds).Sort := '['+Column.FieldName +'] DESC';
TDBGridEh(Sender).Columns[ACol].Title.SortMarker := smDownEh;
end else
begin
TADODataSet(ds).Sort := '['+Column.FieldName +'] ASC';
TDBGridEh(Sender).Columns[ACol].Title.SortMarker := smUpEh;
end;
Все работает нормально, пока дело не доходит до сортировки Lookup-поля. Сортировка требуется только локально. Подскажите, плиз, как лучше реализовать это? С уважением.
-
поле должно существовать в объекте, раз используется его метод. создай его (в запросе добавь со значением например), можешь не показывать, просто перенаправляй сортировку на него, а при выборе в основном меняй и это "сортировочное".
-
Я рассматривал вариант с запросом, где можно сразу выбрать поле со значением, но датасет мне нужен для редактирования, а ADO, насколько я знаю, не поддерживает живые запросы.
-
ADO поддерживает все, что способен представить и реализовать программист...
-
yurikon (05.01.12 11:46) [2]
Select Pole1, Pole2,...Polen, (select Pole1 from moyspravochnik where id = moyatablica.idmoyspravochnik) as PoleIzSpravochnika from moyatablica
вот так можно будет и редактировать.
-
И на сколько я знаю dbgrideh можно настроить сортировку без обработчика, такую конечно как Вам надо придется с обработчиком. А вообще раз уж используете сторонние компоненты, то можно quantum grid использовать, там решен вопрос с сортировкой по лукап полям на сколько мне известно.
-
Через событие OnTitleClick грида:
procedure dbgrdh1_TitleClick(Column: TColumnEh); begin if Column.Title.SortMarker<>smDownEh then begin if Column.Field.FieldKind in [fkLookup] then TADODataSet(Column.Field.DataSet).Sort := '['+Column.Field.KeyFields +'] ASC' else TADODataSet(Column.Field.DataSet).Sort := '['+Column.Field.FieldName +'] ASC'; Column.Title.SortMarker:=smDownEh; end else begin if Column.Field.FieldKind in [fkLookup] then TADODataSet(Column.Field.DataSet).Sort := '['+Column.Field.KeyFields +'] DESC' else TADODataSet(Column.Field.DataSet).Sort := '['+Column.Field.FieldName +'] DESC'; Column.Title.SortMarker:=smUpEh; end; end;
К сожалению, данный вариант не проканает в том плане, что сортировка будет происходить по полю-ключу, а не по полю значений. Решением данной проблемы может стать Только дублирование в запросе значений в соответствии с ключом (выводить их не обязательно), и вместо Column.Field.KeyFields указывать Column.Field.LookupResultFields.
-
Требуется сортировка лукапов (ГридЕх+АДОДатасет), при этом данные для лукапов берутся из другой базы. Т.е. Лукапы использованы для вывода в одной сетке данных из двух разных СУБД. Поэтому, сортировка в запросе не подходит. Попробовал добавить калькулируемые поля, куда подставлять значения из лукапов. Однако сортировать не хочет - при клике на столбец грида, та же ошибка, что и с лукапом- "Не удается найти объект в семействе, соответствующий требуемому имени или порядковому номеру".
Куда копать? АДО умеет сортировать калькулируемые поля?
-
> Куда копать? перекапывай прямо вот эту тему, с начала.
-
> АДО умеет сортировать калькулируемые поля?
Адо ничего не знает о ваших "калькулируемых полях".
-
sniknik >перекапывай прямо вот эту тему, с начала. вы ткните пальцем сортировка в запросе не катит никак что вы имеете в виду "про перенаправляй" я не врубаюсь совсем
Плохиш калькулируемое поле в адо имеется как адо может про него не знать что вы имеете в виду под "не знает"?
-
> вы ткните пальцем ответ первый, что непонятно в словах "поле должно существовать в объекте"?
> что вы имеете в виду "про перенаправляй" 2 поля, одно визуальное, другое для сортировки, при визуальной работе с одним сортируешь другое. не?
> я не врубаюсь совсем ну так и спрашивай про то во что "не врубаешься", не игнорируй не понятое.
> калькулируемое поле в адо имеется кто тебе это сказал? как ты его сделал? средствами ADO или средствами Delpi в обертке? оно тебе в ошибке пишет, "нет поля", и уж поверь "оно" знает.
-
>2 поля, одно визуальное, другое для сортировки, при визуальной работе с одним сортируешь другое. так как же сделать поле, которое будет сортироваться???!!!
>кто тебе это сказал? как ты его сделал? средствами ADO или средствами Delpi в обертке? калькулируемое поле добавлено стандартными средствами среды разработки
>оно тебе в ошибке пишет, "нет поля", и уж поверь "оно" знает. только мне не понять, чего он от меня хочет куда и что надо добавить?
|