Информация

Последние записи

Теги


Блоги


Записи из всех блогов с тегом: devexpress


cxGrid - Data row fixing

В версии 2017.2.2 появилась возможность закреплять вверху или внизу сетки несколько записей, как программно, так и пользователю с помощью мышки.

За это отвечают несколько свойств:
1. Нужно включить GridView.OptionsCustomize.DataRowFixing, чтобы включить этот функционал.

2. Определить, как будет выглядеть в таблице значок, который будет видеть пользователь GridView.FixedDataRows.PinVisibility (rpvAlways, rpvHotTrack or rpvRowHotTrack), если программист собирается дать пользователю управлять закреплёнными строками:
Картинка с другого сайта.

Чтобы программно управлять закреплёнными строками (row), воспользуйтесь свойством DataController.RowFixedState:
cxGrid1DBTableView1.DataController.RowFixedState[0] := rfsFixedToTop; 


Пример цикла:
procedure TForm1.FixRows2;
Var
 colName: TcxGridDBColumn;
 iCurRow: integer;
 ARowInfo:  TcxRowInfo;
begin
  colName := cxGrid1DBTableView1.GetColumnByFieldName(constMyColNAME);
  if not Assigned(colName) then exit;

  cxGrid1DBTableView1.BeginUpdate;
  try

    for iCurRow := 0 to Pred(cxGrid1DBTableView1.DataController.RowCount) do
    begin
      ARowInfo := cxGrid1DBTableView1.DataController.GetRowInfo(iCurRow);

      if ARowInfo.Level < cxGrid1DBTableView1.DataController.Groups.GroupingItemCount then
        Continue
     else
       begin
         //если есть нужное значение, закрепляем строку
         if cxGrid1DBTableView1.DataController.Values[ARowInfo.RecordIndex, colName.Index] = 'my value 123'
         then
           cxGrid1DBTableView1.DataController.RowFixedState[iCurRow] := rfsFixedToTop;


       end;
    end;// for

  finally
    cxGrid1DBTableView1.EndUpdate;
  end;
end;


Ист:
https://www.devexpress.com/Support/Center/Question/Details/K18187/how-to-fix-a-row
https://www.sql.ru/forum/1296597/cxgrid-fixed-data-rows
автор: X11 добавлено: 25 июн 18 просмотры: 1640, комментарии: 0



Программно открыть или закрыть TcxPopupEdit в TcxVerticalGrid

В cxVerticalGrid может быть строка, где Properties.EditProperties := PopupEdit
Как можно закрыть или открыть программно выпадающее окно.


procedure VerticalGridDropDownRow(vg: TcxVerticalGrid; aRow: TcxEditorRow; aDropedDown: boolean);
Var
  AEdit: TcxPopupEdit;
begin
  vg.SetFocus;
  vg.FocusedRow := aRow;
  vg.ShowEdit;
  if (vg.InplaceEditor <> nil) and (vg.InplaceEditor is TcxPopupEdit) then
  begin
    AEdit := TcxPopupEdit(vg.InplaceEditor);
    AEdit.DroppedDown := False;
  end;
end;


У TcxPopupEditProperties отсутствует метод или свойство, позволяющее открыть/закрыть Popup control.
Popup подразумевает работу только с ним. Нельзя открывать несколько Popup`ов одновременно. При потере фокуса Popup должен закрыться.
автор: X11 добавлено: 25 окт 16 просмотры: 2182, комментарии: 0



TcxTreeList - цикл по выделенным узлам

Как пройтись циклом по выделенным узлам TcxDBTreeList?


var
  I, d: Integer;
begin
  for I := 0 to pred(dbTree.SelectionCount) do
    d := TcxDBTreeListNode(dbTree.Selections[i]).KeyValue;


procedure TForm1.Button1Click(Sender: TObject);
var
  ANode: TcxTreeListNode;
begin
  cxTreeList1.BeginUpdate;
  ANode := cxTreeList1.Root.getFirstChild;
  while ANode <> nil do
  begin
    if ANode.Values[cxTreeList1Column1.ItemIndex] = 'Value 2' then
      ANode.Values[cxTreeList1Column2.ItemIndex] := 'Value 5';

    ANode := ANode.GetNext;
  end;
  cxTreeList1.EndUpdate;
end;
автор: X11 добавлено: 07 май 15 просмотры: 1697, комментарии: 1



Как получить видимое значение в строке типа LookupComboBox в TcxVerticalGrid?

Есть cxVerticalGrid со строкой (Properties.EditProperties) типа LookupComboBox. Как получить не значение ключевого поля, а именно то, значение, которое видит пользователь?

S := TcxLookupComboBoxProperties(cxEditorRow1.Properties.EditProperties).GetDisplayText(cxEditorRow1.Properties.Value);
автор: X11 добавлено: 14 ноя 14 просмотры: 2583, комментарии: 0



cxGrid: CellAutoHeight vs DataRowSizing

Есть 2 замечательных свойства: OptionsView.CellAutoHeight и OptionsCustomize.DataRowSizing.
Включены оба параметра, .т.е. = True.

Столкнулся с тем, что если изменить мышкой высоту строк, потом переоткрыть набор данных, то CellAutoHeight вообще никак не влияет. Высота всех строк будет одинакова, хотя свойство CellAutoHeight включено.

Это связано ещё с одним свойством - OptionsView.DataRowHeight. По умолчанию = 0.
Если это свойство больше 0, то свойство CellAutoHeight никак не влияет на высоту строк. Таким образом, чтобы автовысота строк работала "как надо", свойство DataRowHeight должно быть рано 0.
автор: X11 добавлено: 09 апр 14 просмотры: 2426, комментарии: 0



TcxComboboxProperties ItemIndex

Если TcxCombobox встроен, например, в строку (row) вертикальной сетки (TcxVerticalGrid), то есть проблемы с установкой значения, т.к. свойство ItemIndex в этом случае ReadOnly.

Можно попробовать установить значение через свойство Properties.Value, но это ничего не даст, в Combobox`е не будет выбрано нужное значение.

Есть простой выход - использовать ImageCombobox. Т.е. у строки в свойстве EditProperties нужно выбрать ImageComboBox. Тогда значение списка можно устанавливать через Properties.Value.

Начало проблемы здесь >> https://www.sql.ru/forum/1060510/cxcomboboxproperties-i-perechislyaemoe-svoystvo
автор: X11 добавлено: 21 ноя 13 просмотры: 2890, комментарии: 0



DevExpress - получить список скинов программно

Как получить список скинов (DevExpress skins) и загрузить их (скины) в Combobox


uses LookAndFeelPainters;
...

procedure GetSkins(comboSkins: TcxCombobox);
Var
 PaintersManager : TcxCustomLookAndFeelPainter;
 i: integer;
begin
  //загружаем список скинов
  comboSkins.Properties.Items.Clear;
  comboSkins.Properties.Items.Add('');//пустую строку тоже нужно добавить, чтобы пользоватtль мог отменять выбор скина

  for i := 0 to Pred(cxLookAndFeelPaintersManager.Count) do
    comboSkins.Properties.Items.Add(cxLookAndFeelPaintersManager.Items[i].LookAndFeelName);

end;



Как получить список скинов (DevExpress skins) и загрузить их (скины) в TcxComboboxProperties
https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=542538&msg=12170122



uses LookAndFeelPainters;
...

Var
 PaintersManager : TcxCustomLookAndFeelPainter;
 i: integer;
begin
  //загружаем список скинов
  TcxComboBoxProperties(comboSkins.Properties).Items.Clear;
  TcxComboBoxProperties(comboSkins.Properties).Items.Add('');//пустую строку тоже нужно добавить, чтобы пользоватtль мог отменять выбор скина

  for i := 0 to Pred( cxLookAndFeelPaintersManager.Count ) do
    TcxComboBoxProperties(comboSkins.Properties).Items.Add(cxLookAndFeelPaintersManager.Items[i].LookAndFeelName);
автор: X11 добавлено: 01 ноя 13 просмотры: 2910, комментарии: 5



Изменить размер кнопок у cxSpinEdit

У компоненты TcxSpinEdit нет возможности простым путём менять размеры кнопок.
Благодаря подсказке из этой темы на форуме sql.ru удалось решить проблему.

Вот как можно увеличить (изменить) размер кнопок у компоненты TcxSpinEdit
Добавляем в проект новый модуль, вот его код.

unit uSpinEditHack;

interface

uses
  cxEdit, cxSpinEdit, cxGraphics, Windows, Classes;

// этот модуль должен быть последним в верхнем списке USES
   
type
  TMySpinEditViewData = class(TcxSpinEditViewData)
  protected
    procedure CalculateButtonsBounds(ACanvas: TcxCanvas; AViewInfo: TcxCustomEditViewInfo; var ButtonsRect: TRect); override;
  end;

  TMySpinEditProperties = class(TcxSpinEditProperties)
  public
    class function GetViewDataClass: TcxCustomEditViewDataClass; override;
  end;

  TMySpinEdit = class(TcxSpinEdit)
  public
    class function GetPropertiesClass: TcxCustomEditPropertiesClass; override;
  end;

  TcxSpinEdit = class(TMySpinEdit);

implementation

uses
  uShares;

{ TMySpinEdit }

class function TMySpinEdit.GetPropertiesClass: TcxCustomEditPropertiesClass;
begin
  Result := TMySpinEditProperties;
end;

{ TMySpinEditProperties }

class function TMySpinEditProperties.GetViewDataClass: TcxCustomEditViewDataClass;
begin
  Result := TMySpinEditViewData;
end;

{ TMycxSpinEditViewData }

procedure TMySpinEditViewData.CalculateButtonsBounds(ACanvas: TcxCanvas;
  AViewInfo: TcxCustomEditViewInfo; var ButtonsRect: TRect);
begin

  with AViewInfo.ButtonsInfo[cxSpinForwardButtonIndex] do
  begin
    Bounds := Rect(ButtonsRect.Right - uShares.iSpinEditButtonSize , ButtonsRect.Top, ButtonsRect.Right, ButtonsRect.Bottom);
    ButtonsRect.Right := Bounds.Left + 200;
  end;

  with AViewInfo.ButtonsInfo[cxSpinBackwardButtonIndex] do
  begin
    Bounds := Rect(ButtonsRect.Left, ButtonsRect.Top, ButtonsRect.Left + uShares.iSpinEditButtonSize, ButtonsRect.Bottom);
    ButtonsRect.Left := Bounds.Right - 200;
  end;
end;

end.

{iSpinEditButtonSize - это глобальная переменная, а где-то в другой форме меняем размер кнопок и присваиваем его этой переменной}


Теперь достаточно включить в USES (верхний, в тот, что в секции interface) этот модуль и размеры кнопок можно менять. только этот модуль (uSpinEditHack) должен быть последним в списке.

Ссылка на источник
https://www.devexpress.com/Support/Center/Question/Details/Q580764



Если без хака, то работают такие странные условия.
Если менять значение всех четырёх кнопок, то изменение размера кнопок работает работает
 cxSpinEdit1.Properties.Buttons[0].Width := 42;
 cxSpinEdit1.Properties.Buttons[1].Width := 42;

если только двух, то не работает.

Есть зависимость размера кнопок от размера самой компоненты cxSpinEdit. Т.е. больше какого-то определённого значения размер кнопок не установить. Т.е. нужно отключить AutoSize, сделать высоту компоненты огромной и только тогда можно делать размеры кнопок побольше.
автор: X11 добавлено: 30 окт 13 просмотры: 2002, комментарии: 1



TcxGrid - summary по условию, как подсчитать количество отмеченных CheckBox`ов

TcxGridDBTableView сгруппирован по двум полям.
Есть поле типа CheckBox, нужно посчитать количество включенных чекбоксов в каждой группе, в group summary.

1. В сетке открываем Summary/Groups.
2. Добавляем groups 1 шт.
3. Добавляем Items - здесь столько записей, сколько нужно отображать итогов, у меня по трём полям. Третье поле должно подсчитываться по условию.
4. В Linked columns выбираем те поля, по которым сгруппирована сетка, у меня по двум полям.
5. В Items выбираем нужную запись, у меня это та самая колонка типа CheckBox.
6. В инспекторе свойств указываем правильные значений свойств.
7. В свойстве Column выбираем колонку типа checkbox, в ней, в итогах (summary) будем отображать количество отмеченных переключателей.
8. В свойстве Kind указываем vkSum.
9. В свойстве Format указываем !9;0;0, иначе вместо положительных цифр будем иметь значение типа "-12,000", а должно быть просто "12".


Картинка с другого сайта.


Обсуждение здесь: https://www.sql.ru/forum/1041774-1/cxgrid-summary-po-usloviu


В итоге результат вот такой:

Картинка с другого сайта.
автор: X11 добавлено: 18 авг 13 просмотры: 3688, комментарии: 2



TcxTreeList - фильтрация

Фильтрация Nod`ов в TcxTreeList/TcxDBTreeList

У Datacontroller`а есть Filter, но можно использовать другой способ.
Скрывать/отображать узлы в цикле с помощью свойства TcxTreeListNode.Visible

Примеры
procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  ANode: TcxTreeListNode;
begin
  for I := 0 to cxDBTreeList1.AbsoluteCount - 1 do
  begin
    ANode := cxDBTreeList1.AbsoluteItems[I];
    if ANode.Values[cxDBTreeList1FilterColumn.ItemIndex] = 2 then
      ANode.Visible := false;
  end;
end;


procedure TForm1.Button2Click(Sender: TObject);
var
  I: Integer;
begin
  for I := 0 to cxDBTreeList1.AbsoluteCount - 1 do
    cxDBTreeList1.AbsoluteItems[I].Visible := true;
end;
автор: X11 добавлено: 17 авг 13 просмотры: 2303, комментарии: 0


предыдущие записи