在DevExpress的VCL TcxGrid中单击标题列时禁用分组

时间:2017-07-11 00:12:21

标签: delphi devexpress vcl tcxgrid

点击标题列标题后,TcxGridDBtableView会自动按该列分组。我不想那样,我想按那个专栏订购。

我想通过菜单(TcxGridPopupMenu - > Goup by this column )访问该列时按列分组。

3 个答案:

答案 0 :(得分:1)

正如@Uli Gerhardt所提到的,您期望的行为是TcxDBGridTableView开箱即用的行为。您必须更改行为,可能会更改视图

OptionsCustomize.GroupBySorting

这将完全符合您的描述。来自DevExpress的帮助:

  

指定按列对数据排序是否会导致按此分组   柱。

     

语法

     

属性GroupBySorting:Boolean;

     

说明启用GroupBySorting选项可以模拟   MS Outlook 2003的行为。这意味着单击一列   标题会导致按点击列的值对数据进行分组。该   在这种情况下,先前应用的分组将被清除。如果   GroupBySorting选项已禁用,单击列标题会导致   按此列的值排序数据。

     

请注意,如果通过代码进行排序,则GroupBySorting选项无效。

     

GroupBySorting属性的默认值为False。

答案 1 :(得分:0)

只需点击标题,然后停用不需要的属性。

enter image description here

答案 2 :(得分:0)

在下面的代码中,SetUpGrid取消了已在cxGridDBTableView上设置的任何分组, 启用列排序并对名称列上的视图进行排序。

Groupby1Click方法通过设置GroupingIndex(请参阅在线帮助)对代码中给定列进行分组/取消分组。

procedure TDevexGroupingForm.SetUpGrid;
var
  i : Integer;
begin
  try
    cxGrid1DBTableView1.BeginUpdate;

    //  Hide GroupBy panel
    cxGrid1DBTableView1.OptionsView.GroupByBox := False;

    //  Allow column sorting
    cxGrid1DBTableView1.OptionsCustomize.ColumnSorting := True;

    //  Undo any existing grouping e.g. set up in IDE
    for i:= 0 to cxGrid1DBTableView1.ColumnCount - 1 do begin
      cxGrid1DBTableView1.Columns[i].GroupIndex := -1;
    end;

    //  Sort TableView on Name column.  Needs 'Uses dxCore'
    cxGrid1DBTableView1Name.SortOrder := soAscending;

  finally
    cxGrid1DBTableView1.EndUpdate;
  end;

end;

procedure TDevexGroupingForm.Groupby1Click(Sender: TObject);
var
  ACol : TcxGridDBColumn;
  Index : Integer;
begin

  //  The following code operates on the focused column of a TcxGridDBTableView
  //  If the view is already grouped by that column, it is ungrouped;
  //  Otherwise, the column is added to the (initially empty) list of columns
  //  by which the view is grouped;

  Index := TcxGridTableController(cxGrid1DBTableView1.DataController.Controller).FocusedColumnIndex;
  if Index < 0 then
    exit;

  ACol := cxGrid1DBTableView1.Columns[Index];
  if ACol = Nil then
    exit;

  if ACol.GroupIndex < 0 then begin
    //  Add ACol to the list of grouped Columns
    ACol.GroupIndex := cxGrid1DBTableView1.GroupedColumnCount + 1;
  end
  else begin
    //  Ungroup on ACol
    ACol.GroupIndex := -1;
  end;
end;