Недавно наткнулся на неправильную работу функции OptimizeColumnsWidthAll в TRxDbGrid. Для лукапных полей определенных через KeyList/PickList неправильно вычисляется ширина столбца. Тоже самое и для rdgDblClickOptimizeColWidth.
Проблема состоит в том, что вместо строк из PickList ширина определяется для "сырых" строк.
Патч на скорую руку ниже. Буду рад, если автор отревьюит его.
- Код: Выделить всё
- diff --git a/rxdbgrid.pas b/rxdbgrid.pas
 index 0cc53e8..e25ed8e 100644
 --- a/rxdbgrid.pas
 +++ b/rxdbgrid.pas
 @@ -2202,8 +2202,9 @@ end;
 procedure TRxDBGrid.InternalOptimizeColumnsWidth(AColList: TList);
 var
 P:TBookmark;
 - i, W:integer;
 + i, W, n:integer;
 WA:PIntegerArray;
 + S:String;
 begin
 GetMem(WA, SizeOf(Integer) * AColList.Count);
 
 @@ -2220,7 +2221,15 @@ begin
 begin
 for I := 0 to AColList.Count-1 do
 begin
 - W:=Canvas.TextWidth(TRxColumn(AColList[i]).Field.DisplayText) + 6;
 + S:=TRxColumn(AColList[i]).Field.DisplayText;
 + 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;






