Глюки rxDBGrid
Модераторы: alexs, Модераторы
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Re: Глюки rxDBGrid
Я остановился на создании тестового примера.
Проблема в том, что проявляется на моей рабочей БД. А вот на стандартных от серверов (пробовал FB) - нет.
Добавлено спустя 1 час 8 минут 38 секунд:
Изображения поправил.
Добавлено спустя 21 час 20 минут 44 секунды:
Локализовал ошибку. Сделал тестовый пример. Запостил в мантис. http://bugs.freepascal.org/view.php?id=30160
Кто либо может проверить - повторяется проблема на текущих версиях Lazarus-а?
Проблема в том, что проявляется на моей рабочей БД. А вот на стандартных от серверов (пробовал FB) - нет.
Добавлено спустя 1 час 8 минут 38 секунд:
Изображения поправил.
Добавлено спустя 21 час 20 минут 44 секунды:
Локализовал ошибку. Сделал тестовый пример. Запостил в мантис. http://bugs.freepascal.org/view.php?id=30160
Кто либо может проверить - повторяется проблема на текущих версиях Lazarus-а?
-
RusDeveloper
- новенький
- Сообщения: 92
- Зарегистрирован: 06.04.2016 11:02:43
Re: Глюки rxDBGrid
alexs писал(а):повторяется проблема на текущих версиях Lazarus-а?
не текущая (не из SVN, а всего лишь 1.6) и не повторяется у меня такая ошибка.
есть другой вопрос почему для столбца RxDBGrid можно установить SortOrder, но нельзя установить SortPosition? по идее логика здесь должна быть одинаковой...
Код: Выделить всё
public
...
property SortOrder: TSortMarker read FSortOrder write FSortOrder;
property SortPosition: integer read FSortPosition; - alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Re: Глюки rxDBGrid
RusDeveloper писал(а):е текущая (не из SVN, а всего лишь 1.6) и не повторяется у меня такая ошибка.
Вопрос именно в SVN ревизии 52322
-
RusDeveloper
- новенький
- Сообщения: 92
- Зарегистрирован: 06.04.2016 11:02:43
Re: Глюки rxDBGrid
это-то понятно
что со свойствами?
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Re: Глюки rxDBGrid
А зачем?
-
RusDeveloper
- новенький
- Сообщения: 92
- Зарегистрирован: 06.04.2016 11:02:43
Re: Глюки rxDBGrid
понятно, что если я сейчас напишу, что сортировку программно задать, будет ответ вроде пользуйся SetSort. НО! коли есть возможность задавать SortOrder, то и должна быть возможность задавать SortPosition для сортировки по нескольким полям... я не прав?
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Re: Глюки rxDBGrid
Давай патчик. Самому лень делать 
Добавлено спустя 1 час 39 минут 15 секунд:
Ошибку с морганием грида поправили.
Добавлено спустя 1 час 39 минут 15 секунд:
Ошибку с морганием грида поправили.
-
RusDeveloper
- новенький
- Сообщения: 92
- Зарегистрирован: 06.04.2016 11:02:43
Re: Глюки rxDBGrid
это нужно в исходниках rxDBGrid копаться... просто правка на
не увенчалась успехом. т.е. оно-то изменяется на нужное мне значение, но это не приводит к отображению стрелок сортировки в гриде...
Код: Выделить всё
public
...
property SortOrder: TSortMarker read FSortOrder write FSortOrder;
property SortPosition: integer read FSortPosition write FSortPosition;не увенчалась успехом. т.е. оно-то изменяется на нужное мне значение, но это не приводит к отображению стрелок сортировки в гриде...
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Re: Глюки rxDBGrid
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; //Это выполнение физической сортировки данных в памяти датасета
Оно разве так удобно?
-
RusDeveloper
- новенький
- Сообщения: 92
- Зарегистрирован: 06.04.2016 11:02:43
Re: Глюки rxDBGrid
alexs писал(а):Оно разве так удобно?
это уже второстепенный вопрос. одно и то же можно делать разными способами...
Re: Глюки rxDBGrid
Алекс, привет.
В ревизии 4654 вылезает хинт
не смертельно, но напрягает. Поправить можно?
В ревизии 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"не смертельно, но напрягает. Поправить можно?
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Re: Глюки rxDBGrid
Оно не критично.
Но если править - то пакеты надо разносить по разным папкам. Не совместимость по установке получится.
Не очень этого хочется.
Но если править - то пакеты надо разносить по разным папкам. Не совместимость по установке получится.
Не очень этого хочется.
Re: Глюки rxDBGrid
Пользователи жаловались на тихий вылет софтины при попытке показа формы с фильтром. Наконец то удалось отловить этот весьма неприятный баг. Оказалось в определенных случаях одно из полей вообще не создавалось. 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;
А вообще дебаггер Лазаря оставляет желать лучшего. Как отлаживать то сторонние компоненты? Брейкпоинты на исходниках вне проекта не работают. Только стек вызовов выручает, а дальше по старинке запись построчных логов в файл.
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Re: Глюки rxDBGrid
naum_off
rev 5232.
rev 5232.
Re: Глюки rxDBGrid
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;
