Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 DevExpress сортировка в Гриде не работает  [new]
yemets63
Member

Откуда: Самара
Сообщений: 1277
TCXGrid кликаю по некоторым столбцам и они не сортируют, в чем может быть причина? свойства сортировки на компоненте на столбце включены, или я не все свойства знаю.

не все столбцы, а именно некоторые, сравнил свойства с теми что сортируют, отличий не нашел

в чем может быть дело?
6 фев 20, 12:00    [22074510]     Ответить | Цитировать Сообщить модератору
 Re: DevExpress сортировка в Гриде не работает  [new]
ёёёёё
Member

Откуда:
Сообщений: 1976
yemets63
TCXGrid кликаю по некоторым столбцам и они не сортируют, в чем может быть причина? свойства сортировки на компоненте на столбце включены, или я не все свойства знаю.

не все столбцы, а именно некоторые, сравнил свойства с теми что сортируют, отличий не нашел

в чем может быть дело?

Чnо по этому поводу пишут в документации?
6 фев 20, 12:18    [22074531]     Ответить | Цитировать Сообщить модератору
 Re: DevExpress сортировка в Гриде не работает  [new]
zinpub
Member

Откуда:
Сообщений: 420
Какой режим у datacontroller, какой тип у столбца?
6 фев 20, 12:31    [22074561]     Ответить | Цитировать Сообщить модератору
 Re: DevExpress сортировка в Гриде не работает  [new]
DimaBr
Member

Откуда:
Сообщений: 11496
yemets63
не все столбцы, а именно некоторые, сравнил свойства с теми что сортируют, отличий не нашел

Значит тип этих столбцов не подразумевает сортировку.
Например в столбце отображается картинка, как по ней сортировать ?
6 фев 20, 14:00    [22074700]     Ответить | Цитировать Сообщить модератору
 Re: DevExpress сортировка в Гриде не работает  [new]
yemets63
Member

Откуда: Самара
Сообщений: 1277
было бы все так просто, я бы уже понял в чем дело,
смотрю что в источнике с данными.
6 фев 20, 14:08    [22074714]     Ответить | Цитировать Сообщить модератору
 Re: DevExpress сортировка в Гриде не работает  [new]
Кроик Семён
Member

Откуда: СПб --> Dortmund
Сообщений: 6599
yemets63,

У меня старая версия компонент, еще с приставкой "Dx" вместо сегодняшних "Cx". Были проблемы с сортировкой, например когда были NULL значения в ячейках. И не работала совсем сортировка по множеству колонок (Grid.OptionsBehavior = [....., edgoMultiSort, .....] ).

Исправил, написав свою функцию сравнения OnDxListeCompare, которую вызываю из обработчика OnCompare-события грида.

Предполагаю, если вы замените в моем коде "Dx" на "Cx", то и у вас заработает как нужно.

завернул в спойлер:
+ procedure OnDxListeCompare

procedure OnDxListeCompare(Sender: TObject; Node1, Node2: TdxTreeListNode;
   var Compare: Integer);
var
   i           : integer;
   Col         : TdxTreeListColumn;

   iColID      : integer;
   Var1        : variant;
   Var2        : variant;
   IsVar1NULL  : boolean;
   IsVar2NULL  : boolean;

   Grid        : TCustomdxTreeListControl;
begin
   Compare:=0;

   if Sender is TCustomdxTreeList then
   begin
      Grid:=TCustomdxTreeListControl(Sender);

      for i:=0 to Grid.SortedColumnCount-1 do
      begin
         Col:=Grid.SortedColumns[i];
         iColID:=Col.Index;

         Var1:=Node1.Values[iColID];
         Var2:=Node2.Values[iColID];

         IsVar1NULL:=VarIsEmpty(Var1) or VarIsNull(Var1);
         IsVar2NULL:=VarIsEmpty(Var2) or VarIsNull(Var2);

         if IsVar1NULL or IsVar2NULL then
         begin
            if IsVar1NULL and IsVar2NULL then Compare:=0
            else
            if IsVar1NULL then Compare:=-1
            else
               Compare:=+1;
         end
         else
         begin
            if Var1<Var2 then Compare:=-1
            else
            if Var1>Var2 then Compare:=+1
            else
               Compare:=0;
         end;

         if Col.Sorted=csDown then Compare:=-Compare;

         if Compare<>0 then break;
      end; //for i
   end; //if Sender is TCustomdxTreeList
end;



и пример вызова

procedure TForm1.DxDBGrid1Compare(Sender: TObject; Node1,
  Node2: TdxTreeListNode; var Compare: Integer);
begin
   OnDxListeCompare(Sender, Node1, Node2, Compare);
end;
6 фев 20, 15:15    [22074836]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить