Страница 15 из 22

Re: Глюки rxDBGrid

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

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

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

Re: Глюки rxDBGrid

СообщениеДобавлено: 20.05.2016 13:47:39
RusDeveloper
alexs писал(а):повторяется проблема на текущих версиях Lazarus-а?

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

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

Re: Глюки rxDBGrid

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

Вопрос именно в SVN ревизии 52322

Re: Глюки rxDBGrid

СообщениеДобавлено: 20.05.2016 13:51:10
RusDeveloper
это-то понятно :) что со свойствами?

Re: Глюки rxDBGrid

СообщениеДобавлено: 20.05.2016 13:52:52
alexs
А зачем?

Re: Глюки rxDBGrid

СообщениеДобавлено: 20.05.2016 13:56:56
RusDeveloper
понятно, что если я сейчас напишу, что сортировку программно задать, будет ответ вроде пользуйся SetSort. НО! коли есть возможность задавать SortOrder, то и должна быть возможность задавать SortPosition для сортировки по нескольким полям... я не прав?

Re: Глюки rxDBGrid

СообщениеДобавлено: 20.05.2016 13:58:53
alexs
Давай патчик. Самому лень делать :D

Добавлено спустя 1 час 39 минут 15 секунд:
Ошибку с морганием грида поправили.

Re: Глюки rxDBGrid

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

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

Re: Глюки rxDBGrid

СообщениеДобавлено: 24.05.2016 16:38:05
alexs
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; //Это выполнение физической сортировки данных в памяти датасета


Оно разве так удобно?

Re: Глюки rxDBGrid

СообщениеДобавлено: 25.05.2016 12:42:20
RusDeveloper
alexs писал(а):Оно разве так удобно?

это уже второстепенный вопрос. одно и то же можно делать разными способами...

Re: Глюки rxDBGrid

СообщениеДобавлено: 27.07.2016 16:01:32
zoltanleo
Алекс, привет.

В ревизии 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"

не смертельно, но напрягает. Поправить можно?

Re: Глюки rxDBGrid

СообщениеДобавлено: 27.07.2016 16:07:27
alexs
Оно не критично.
Но если править - то пакеты надо разносить по разным папкам. Не совместимость по установке получится.
Не очень этого хочется.

Re: Глюки rxDBGrid

СообщениеДобавлено: 29.09.2016 16:40:58
naum_off
Пользователи жаловались на тихий вылет софтины при попытке показа формы с фильтром. Наконец то удалось отловить этот весьма неприятный баг. Оказалось в определенных случаях одно из полей вообще не создавалось. 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; 
         


А вообще дебаггер Лазаря оставляет желать лучшего. Как отлаживать то сторонние компоненты? Брейкпоинты на исходниках вне проекта не работают. Только стек вызовов выручает, а дальше по старинке запись построчных логов в файл.

Re: Глюки rxDBGrid

СообщениеДобавлено: 29.09.2016 17:50:27
alexs
naum_off
rev 5232.

Re: Глюки rxDBGrid

СообщениеДобавлено: 24.10.2016 12:54:18
Naumoff
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;