Информация

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

Теги


Блоги


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


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
http://www.sql.ru/forum/1296597/cxgrid-fixed-data-rows
автор: X11 добавлено: 25 июн 18 просмотры: 1667, комментарии: 0



cxGrid: CellAutoHeight vs DataRowSizing

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

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

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



cxGrid - прокрутить сетку до нужной записи

Как программно в TcxGridDBTableView выполнить прокрутить (scroll) сетку до нужной записи?

TcxGridDBTableView.DataController.MakeRecordVisible(RecoedIndex);

или
TcxGridDBTableView.Controller.FocusedRow.MakeVisible;





Если нужно установить строку по центру сетки:
http://www.sql.ru/forum/1050625/tcxgrid-tcxverticalgrid-kak-skrollirovat-v-centr-na-nuzhnyy-stolbec-stroku#14909273

<TcxGridDBTableView>.Controller.TopRecordIndex 

и
<TcxGridDBTableView>.Controller.LeftPos


см. справку по этим методам
автор: X11 добавлено: 01 окт 13 просмотры: 2395, комментарии: 0



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".


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


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


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

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



Перенос заголовка в Band. Автоперенос в Band у TcxGridDBBandedTableView.

Как сделать многострочный заголовок (Caption) в свойствах Band, с переносом строк?


У сетки (BandedTableView, DBBandedTableView) отсутствует свойство Autoheight или что-то подобное для Band`ов. Но выход есть.
Требуется изменить значение свойства <TcxGridDBBandedTableView>.OptionsView.BandHeaderHeight типа integer. Установите в нём значение, отличное от 0, например, 40.



Картинка с другого сайта.
Рис.1
автор: X11 добавлено: 19 апр 13 просмотры: 2477, комментарии: 0



Как обновить или перерисовать принудительно cxGrid?

Как обновить или перерисовать принудительно/программно TcxGridDBTableView?


Нужно использовать

<TcxGridDBTableView>.LayoutChanged



Методы:
cxGrid1.Refresh;

и
cxGrid1.Repaint;

не помогут
автор: X11 добавлено: 15 фев 13 просмотры: 3425, комментарии: 0



Как прикрутить виртуальную колонку к cxGrid?

How to set up an unbound item in a data-aware View
Unbound Column + data-aware cxGrid



http://www.devexpress.com/Support/Center/kb/p/A1095.aspx


Обратите внимание на три условия:
Установить DataModeController.SmartRefresh в True
Установить DataModeController.GridMode в False
Правильно указать значение DataController.KeyFieldNames
Обязательно проверьте, чтобы OptionsData.Editing былы в True
автор: X11 добавлено: 05 янв 13 просмотры: 2152, комментарии: 0



Как выделить и сфокусировать строку в cxGrid программно?

Например, при показе формы нужно в TcxGrid выделить программно и сфокусировать строку.

Делается это просто:

  with <TcxGridDBTableView> do
    if DataController.RecordCount > 0 then
      Controller.FocusedRow.Selected := True;
автор: X11 добавлено: 10 дек 12 просмотры: 4326, комментарии: 0



Как в cxGrid показать количество записей в группе и просуммировать значение поля?

Как в TcxGrid отобразить количество записей в группе и просуммировать значение поля по группам?

Как реализовать такое, как на картинке?
Картинка с другого сайта.

Реализация содержится в справке.
Ссылка для справочной системы Delphi 2007:
ms-help://borland.bds5/ExpressDataController.BDS5/ExpressDataController/Example_TcxDataSummary_OnAfterSummary.htm


procedure TForm1.Initialize;
var
  ASummaryItem: TcxDataSummaryItem;
begin
  //group by vendor
  DBTableView1VendorNo.GroupIndex := 0;
  DBTableView1VendorNo.Visible := False;
  with DBTableView1.DataController.Summary do
  begin
    BeginUpdate;
    try
      //set prefix and postfix for a group capion
      DefaultGroupSummaryItems.BeginText := '{';
      DefaultGroupSummaryItems.EndText := '}';
      //summary on ListPrice
      ASummaryItem := DefaultGroupSummaryItems.Add;
      ASummaryItem.Kind := skSum;
      ASummaryItem.ItemLink := DBTableView1ListPrice;
      ASummaryItem.Position := spFooter;
      //summary on Description
      ASummaryItem := DefaultGroupSummaryItems.Add;
      ASummaryItem.Kind := skCount;
      ASummaryItem.ItemLink := DBTableView1Description;
      ASummaryItem.Position := spFooter;
      //dummy summary on Description
      ASummaryItem := DefaultGroupSummaryItems.Add;
      ASummaryItem.Kind := skNone;
      ASummaryItem.ItemLink := DBTableView1Description;
      //subscribe to the OnAfterSummary event
      OnAfterSummary := MyAfterSummary;
    finally
      EndUpdate;
    end;
  end;
end;


procedure TForm1.MyAfterSummary(ASender: TcxDataSummary);
var
  AChildDataGroupsCount: Integer;
  AChildDataGroupIndex, AParentDataGroupIndex: TcxDataGroupIndex;
  AChildPosition: Integer;
begin
  //iterate through data groups at the level 0
  AParentDataGroupIndex := -1;
  with DBTableView1.DataController.Groups do
  begin
    AChildDataGroupsCount := ChildCount[AParentDataGroupIndex];
    for AChildPosition := 0 to AChildDataGroupsCount - 1 do
    begin
      //data group index of a child
      AChildDataGroupIndex := ChildDataGroupIndex[AParentDataGroupIndex, AChildPosition];
      CalculateGroupAverage(AChildDataGroupIndex);
    end;
  end;
end;



procedure TForm1.CalculateGroupAverage(ADataGroupIndex: TcxDataGroupIndex);
var
  AVarSum, AVarCount, AVarAverage: Variant;
begin
  with DBTableView1.DataController.Summary do
  begin
    //get sum of prices for specific data group
    //the second argument identifies a summary index in the
    //TcxDataSummary.DefaultGroupSummaryItems collection
    AVarSum := GroupSummaryValues[ADataGroupIndex, 0];
    //get records count in a group
    AVarCount := GroupSummaryValues[ADataGroupIndex, 1];
    if not (VarIsNull(AVarSum) or VarIsNull(AVarCount)) then
    begin
      AVarAverage := AVarSum / AVarCount;
      GroupSummaryValues[ADataGroupIndex, 2] := Format('%m / %d = %m', [Double(AVarSum), Integer(AVarCount), Double(AVarAverage)]);
    end;
  end;
end;
автор: X11 добавлено: 29 ноя 12 просмотры: 4510, комментарии: 0



Подсветка символов/слов в cxGrid

Подсветка символов (слов) в TcxGrid


procedure <Grid>CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var R: TRect;
    s1,S2: string;
    X,dx,cx,C,Y: integer;
begin
  if checkHighLight.EditValue = false then exit;

  ADone := true;
  R := AViewInfo.Bounds;
  s1 := AViewInfo.Text;
  C := Length(edSearch.Text);
  cx := ACanvas.TextWidth(edSearch.Text);
  ACanvas.FillRect(R);
  X := R.Left;
  if AViewInfo.Selected
    then ACanvas.Font.Color := clWhite
    else ACanvas.Font.Color := clBlack;
  ACanvas.Canvas.TextOut(R.Left + 1, R.Top + 1, S1);
  ACanvas.Font.Color := clRed;
  repeat
    Y := Pos(edSearch.Text, S1);
    if Y > 1 then begin
      S2 := Copy(S1,1,Y-1);
      dx := ACanvas.TextWidth(s2);
      Delete(S1,1,Y-1);
      Inc(X,dx);
    end;

    if Y > 0 then begin
      ACanvas.Canvas.Brush.Style := bsClear;
      ACanvas.Canvas.TextOut(X + 1, R.Top + 1, copy(S1, 1, C));
      Delete(S1,1,C);
      Inc(X,cx);
    end;
  until Y = 0;

end;


оригинал ищите на sql.ru или рубоарде


Здесь
http://www.sql.ru/forum/940778/podsvetka-slov-v-yacheykah-cxgrid-tcxgriddbtableview
ещё один вариант: подсветка слов с помощью TcxRichEdit
...
...
автор: X11 добавлено: 28 ноя 12 просмотры: 2427, комментарии: 1


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