Глюки rxDBGrid

Модераторы: alexs, Модераторы

Re: Глюки rxDBGrid

Сообщение alexs » 19.05.2016 11:09:02

Я остановился на создании тестового примера.
Проблема в том, что проявляется на моей рабочей БД. А вот на стандартных от серверов (пробовал FB) - нет.

Добавлено спустя 1 час 8 минут 38 секунд:
Изображения поправил.

Добавлено спустя 21 час 20 минут 44 секунды:
Локализовал ошибку. Сделал тестовый пример. Запостил в мантис. http://bugs.freepascal.org/view.php?id=30160
Кто либо может проверить - повторяется проблема на текущих версиях Lazarus-а?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Глюки rxDBGrid

Сообщение RusDeveloper » 20.05.2016 13:47:39

alexs писал(а):повторяется проблема на текущих версиях Lazarus-а?

не текущая (не из SVN, а всего лишь 1.6) и не повторяется у меня такая ошибка.

есть другой вопрос почему для столбца RxDBGrid можно установить SortOrder, но нельзя установить SortPosition? по идее логика здесь должна быть одинаковой...
Код: Выделить всё
public
    ...
    property SortOrder: TSortMarker read FSortOrder write FSortOrder;
    property SortPosition: integer read FSortPosition;
RusDeveloper
новенький
 
Сообщения: 92
Зарегистрирован: 06.04.2016 12:02:43

Re: Глюки rxDBGrid

Сообщение alexs » 20.05.2016 13:50:17

RusDeveloper писал(а):е текущая (не из SVN, а всего лишь 1.6) и не повторяется у меня такая ошибка.

Вопрос именно в SVN ревизии 52322
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Глюки rxDBGrid

Сообщение RusDeveloper » 20.05.2016 13:51:10

это-то понятно :) что со свойствами?
RusDeveloper
новенький
 
Сообщения: 92
Зарегистрирован: 06.04.2016 12:02:43

Re: Глюки rxDBGrid

Сообщение alexs » 20.05.2016 13:52:52

А зачем?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Глюки rxDBGrid

Сообщение RusDeveloper » 20.05.2016 13:56:56

понятно, что если я сейчас напишу, что сортировку программно задать, будет ответ вроде пользуйся SetSort. НО! коли есть возможность задавать SortOrder, то и должна быть возможность задавать SortPosition для сортировки по нескольким полям... я не прав?
RusDeveloper
новенький
 
Сообщения: 92
Зарегистрирован: 06.04.2016 12:02:43

Re: Глюки rxDBGrid

Сообщение alexs » 20.05.2016 13:58:53

Давай патчик. Самому лень делать :D

Добавлено спустя 1 час 39 минут 15 секунд:
Ошибку с морганием грида поправили.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Глюки rxDBGrid

Сообщение RusDeveloper » 24.05.2016 16:05:30

это нужно в исходниках rxDBGrid копаться... просто правка на
Код: Выделить всё
public
    ...
    property SortOrder: TSortMarker read FSortOrder write FSortOrder;
    property SortPosition: integer read FSortPosition write FSortPosition;

не увенчалась успехом. т.е. оно-то изменяется на нужное мне значение, но это не приводит к отображению стрелок сортировки в гриде...
RusDeveloper
новенький
 
Сообщения: 92
Зарегистрирован: 06.04.2016 12:02:43

Re: Глюки rxDBGrid

Сообщение alexs » 24.05.2016 16:38:05

RusDeveloper писал(а):т.е. оно-то изменяется на нужное мне значение, но это не приводит к отображению стрелок сортировки в гриде...

Естественно. Грид то надо перерисовать после этого.

Добавлено спустя 14 минут 16 секунд:
Там ещё для управления сортировкой служат скрытые методы
Код: Выделить всё
    procedure CollumnSortListUpdate;
    procedure CollumnSortListClear;
    procedure CollumnSortListApply;

Для полноценной реализации надо тогда будет писать код следующего вида:

Код: Выделить всё
  RxDBGrid2.ColumnByFieldName('Field1').SortOrder:=smUp;
  RxDBGrid2.ColumnByFieldName('Field1').SortPosition:=1;
  RxDBGrid2.ColumnByFieldName('Field2').SortOrder:=smDown;
  RxDBGrid2.ColumnByFieldName('Field2').SortPosition:=2;
  RxDBGrid2.ColumnByFieldName('Field3').SortOrder:=smUp;
  RxDBGrid2.ColumnByFieldName('Field3').SortPosition:=3;
  RxDBGrid2.CollumnSortListUpdate; //Это упорядочивает список полей для сортировки.

  RxDBGrid2.CollumnSortListApply; //Это выполнение физической сортировки данных в памяти датасета


Оно разве так удобно?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Глюки rxDBGrid

Сообщение RusDeveloper » 25.05.2016 12:42:20

alexs писал(а):Оно разве так удобно?

это уже второстепенный вопрос. одно и то же можно делать разными способами...
RusDeveloper
новенький
 
Сообщения: 92
Зарегистрирован: 06.04.2016 12:02:43

Re: Глюки rxDBGrid

Сообщение zoltanleo » 27.07.2016 16:01:32

Алекс, привет.

В ревизии 4654 вылезает хинт
Код: Выделить всё
Warning: other unit files search path (aka unit path) of "rxtools 0.1.0.2" contains "D:\Archive\development\lazarus_trunk\components\rx_lib", which belongs to package "rxnew"

не смертельно, но напрягает. Поправить можно?
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 457
Зарегистрирован: 17.10.2013 10:55:01

Re: Глюки rxDBGrid

Сообщение alexs » 27.07.2016 16:07:27

Оно не критично.
Но если править - то пакеты надо разносить по разным папкам. Не совместимость по установке получится.
Не очень этого хочется.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Глюки rxDBGrid

Сообщение naum_off » 29.09.2016 16:40:58

Пользователи жаловались на тихий вылет софтины при попытке показа формы с фильтром. Наконец то удалось отловить этот весьма неприятный баг. Оказалось в определенных случаях одно из полей вообще не создавалось. SQL запрос так формировался, мой косяк, но все же может стоит немного исправить в rxfilterby
Код: Выделить всё
procedure TrxFilterByForm.ClearALL(AGrid: TRxDBGrid)

for i := 0 to AGrid.Columns.Count - 1 do
  begin
   
    if (AGrid.Columns[i].Field.FieldKind = fkData) and (AGrid.Columns[i].Visible) then
    begin
      Combo_1[1].Items.Objects[Combo_1[1].Items.Add(AGrid.Columns[i].Title.Caption)] :=
        AGrid.Columns[i].Field;
    end;
  end; 
         

на
Код: Выделить всё
for i := 0 to AGrid.Columns.Count - 1 do
  begin
   
    if Assigned(AGrid.Columns[i].Field) and (AGrid.Columns[i].Field.FieldKind = fkData) and (AGrid.Columns[i].Visible) then
    begin
      Combo_1[1].Items.Objects[Combo_1[1].Items.Add(AGrid.Columns[i].Title.Caption)] :=
        AGrid.Columns[i].Field;
    end;
  end; 
         


А вообще дебаггер Лазаря оставляет желать лучшего. Как отлаживать то сторонние компоненты? Брейкпоинты на исходниках вне проекта не работают. Только стек вызовов выручает, а дальше по старинке запись построчных логов в файл.
naum_off
незнакомец
 
Сообщения: 6
Зарегистрирован: 25.08.2016 13:31:45

Re: Глюки rxDBGrid

Сообщение alexs » 29.09.2016 17:50:27

naum_off
rev 5232.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Глюки rxDBGrid

Сообщение Naumoff » 24.10.2016 12:54:18

alexs
Предлагаю при автоподгонке ширины столбцов пробегаться не по всему датасету, а только по видимым записям.
Код: Выделить всё
procedure TRxDBGrid.InternalOptimizeColumnsWidth(AColList: TList);
var
  P: TBookmark;
  i, W, n, cRow: integer;
  WA: PIntegerArray;
  S: string;
begin
  GetMem(WA, SizeOf(integer) * AColList.Count);

  for I := 0 to AColList.Count - 1 do
  begin
    if TRxColumnTitle(TRxColumn(AColList[i]).Title).CaptionLinesCount > 1 then
      WA^[i] := Max(Canvas.TextWidth(
        TRxColumnTitle(TRxColumn(AColList[i]).Title).CaptionLine(
        TRxColumnTitle(TRxColumn(AColList[i]).Title).CaptionLinesCount -
        1).Caption) + 8, 20)
    else
      WA^[i] := Max(Canvas.TextWidth(TRxColumn(AColList[i]).Title.Caption) + 8, 20);
  end;

  with DataSource.DataSet do
  begin
    DisableControls;
    P := GetBookmark;
    First;
    try
      cRow := 0;
      while not EOF and (cRow < VisibleRowCount)  do
      begin
        for I := 0 to AColList.Count - 1 do
        begin
          if Assigned(TRxColumn(AColList[i]).Field) then
            S := TRxColumn(AColList[i]).Field.DisplayText
          else
            S:='';
          with TRxColumn(AColList[i]) do
            if (KeyList.Count > 0) and (PickList.Count > 0) then
            begin
              n := KeyList.IndexOf(S);
              if (n <> -1) and (n < PickList.Count) then
                S := PickList.Strings[n];
            end;
          W := Canvas.TextWidth(S) + 6;
          if WA^[i] < W then
            WA^[i] := W;
        end;
        Inc(cRow);
        Next;
      end;
    finally
      GotoBookmark(p);
      FreeBookmark(p);
      EnableControls;
    end;
  end;

  for I := 0 to AColList.Count - 1 do
    if WA^[i] > 0 then
      TRxColumn(AColList[i]).Width := WA^[i];

  FreeMem(WA, SizeOf(integer) * AColList.Count);
end;               
Naumoff
новенький
 
Сообщения: 11
Зарегистрирован: 13.08.2016 19:32:20

Пред.След.

Вернуться в RxLib

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

Рейтинг@Mail.ru