DBGridEh сортировка вычисляемого поля
Доброе время суток,
Вопрос:
если в DataSet есть вычисляемое поле (сделанное в TIBDataSet отображаемое DBGridEh, сортировка серверная) напирмер "calc_СOLOR", и поле-источник в БД "СOLOR".
При нажатии на заголовок колонки "calc_СOLOR", я корректирую order by и подставляю в запрос "СOLOR".
Делаю
ADataSet.Active := true;
После этого в процедуре ApplySortingForSQLBasedDataSet модуля "DbUtilsEh", всеравно поставляется "calc_СOLOR"? (Потому что в order by, он там подставляет именно название с колонки)
Как поступить?
Ответы (1 шт):
Т.е. не знаю насколько это правильно...
Но для сортировки по вычисляемому полю (сделанное в TIBDataSet отображаемое DBGridEh, сортировка серверная), т.е. когда левой кнопкой мышки нажимаешь на заголовке колонки вычисляемого поля
сначало в запрос конечно подставляю в предложение order by поле "COLOR":
if AColumn.FieldName = 'calc_COLOR' then
AColumn.FieldName := 'COLOR';
ADataSet.SelectSQL.Clear;
ADataSet.SelectSQL.Add(L_SQL1);
ADataSet.SelectSQL.Add('order by '+ AColumn.FieldName+' ');
ADataSet.SelectSQL.Add(L_SQL2);
ADataSet.Active := true;
происходит сортировка (в том числе работа процедуры "ApplySortingForSQLBasedDataSet" в "DbUtilsEh.pas"), которую я прямо вызываю с события "DBGridEh.SortMarkingChanged".
...
ApplySortingForSQLBasedDataSet(TCustomDBGridEh(Sender), DM.ibdsEquipment, true, true, 'SelectSQL');
for LInd := 0 to dbgrehEquipment.Columns.Count-1 do
if DBGrid.Columns[LInd].FieldName = 'COLOR' then
begin
DBGrid.Columns[LInd].FieldName := 'calc_COLOR';
break;
end;
- я ставлю все на свои места
Это работает
P.S.
L_SQL1 и L_SQL2 - части одного запроса, просто у меня запрос сложный и 'order by ' стоит в средине самого запроса