Автор: asutp2
Дата сообщения: 13.08.2015 11:15
<MyGrid>.<MyView>.DataController.Options.dcoSortByDisplayText := False
это тоже установлено, но не помогает.
Добавлено:
В общем путем отладки выяснил, что данные внутри DataController почему то хранятся в виде string, а не TDateTime.
В итоге решил сделать сравнение самостоятельно, вот рабочий код для XE7:
procedure TFormMain.GridInvoicesTableViewDataControllerCompare(
ADataController: TcxCustomDataController; ARecordIndex1, ARecordIndex2, AItemIndex: Integer;
const V1, V2: Variant; var Compare: Integer);
var
IntlValue1: string;
IntlValue2: string;
IntlDate1: TDateTime;
IntlDate2: TDateTime;
IntlData: TVarData;
// конвертация строки в формате 'dd.mm.yyyy' в дату
function ConvertStringtoDate(const AValue: string): TDateTime;
begin
// результат
Result := EncodeDate(
StrToInt(Trim(Copy(AValue, 7, 4))),
StrToInt(Trim(Copy(AValue, 4, 2))),
StrToInt(Trim(Copy(AValue, 1, 2)))
);
end;
begin
// поле типа "дата"?
if AItemIndex = GridInvoicesTableViewColumnCreated.Index then
begin
// поле типа "дата"
// значения даты в текстовом виде
IntlValue1 := ADataController.Values[ARecordIndex1, AItemIndex];
IntlValue2 := ADataController.Values[ARecordIndex2, AItemIndex];
// значения даты в числовом виде
IntlDate1 := ConvertStringtoDate(IntlValue1);
IntlDate2 := ConvertStringtoDate(IntlValue2);
// сравниваем
Compare := IfThen(
Trunc(IntlDate1) > Trunc(IntlDate2),
1,
IfThen(
Trunc(IntlDate1) < Trunc(IntlDate2),
-1,
0
)
);
end
else
begin
// поля иного типа, сравниваем стандартным способом
case VarCompareValue(V1, V2) of
vrEqual:
// равны
Compare := 0;
vrLessThan:
// первый параметр меньше
Compare := -1;
vrGreaterThan:
// первый параметр больше
Compare := 1;
vrNotEqual:
begin
// один из параметров пустой, другой не пустой
// данные первого параметра
IntlData := FindVarData(V1)^;
// первый параметр пустой?
if IntlData.VType = varEmpty then
// первый параметр пустой, значит первый параметр меньше второго
Compare := -1
else
// первый параметр не пустой, значит пустой второй и первый больше
Compare := 1;
end;
end;
end;
end;