如何按 2 列分组,但值在同一行
How to group by 2 columns, but have the values on the same row
不确定如何用文字准确解释这一点,但我认为通过几个例子就可以理解
在 this first example 中,我仅按一列分组,位置。在位置字段中,我在路径中使用 spaces,即 location: ['Home', ''],
(1 space), location: ['Home', ' '],
(2 spaces) 这样我就可以有 2 个其他列作为主行的“详细信息”(即在此示例中清洁器类型和清洁器重量)
看起来像这样:
也许有更好的方法来做到这一点,但如果我只想按一列分组,这在上面会起作用。
但是,我实际上想按 两个 列进行分组,但只有那 2 个详细(子)记录“嵌套”)。
在上面,我还想按 room 分组,但没有 room 作为嵌套行。
所以,在上面我有(location=Home, room=room1)
,但我也可能有(location=Home, room=room2)
,即我有room2
例如:
我尝试了各种方法,但就是无法得到这个视图(我总是以不需要的嵌套结束),例如,这就是我不想要的:
有没有办法实现这种视图?
我从 this post 中找到了执行此操作的方法。
所以在这个例子中,你可以用一个完全不同的属性 完全没有显示在网格中 getDataPath
来控制分组,然后用 valueGetter
放什么你想要在分组列中。
所以我可以有以下....
var gridOptions = {
columnDefs: [
// we're using the auto group column by default!
{ field: 'room',resizable: true, },
{ field: 'cleanertype', resizable: true, },
{ field: 'cleanerweight',aggFunc: 'sum', resizable: true, },
{ field: 'totalweight', resizable: true, },
],
defaultColDef: {
flex: 1,
},
autoGroupColumnDef: {
headerName: 'location',
sortable: true,
resizable: true,
filter: 'agTextColumnFilter',
valueGetter: (params) => {
return params.node.data.location; // <--- what to show in the group column
},
cellRendererParams: {
suppressCount: true,
},
},
rowData: rowData,
treeData: true, // enable Tree Data mode
animateRows: true,
groupDefaultExpanded: -1, // expand all groups by default
getDataPath: function (data) {
return data.grouping; // <= how to group/nest
},
};
和数据...
var rowData = [
// Home/room1
{
grouping: ['1'],
location: 'Home',
room: 'room1',
cleanertype: '',
totalweight: 60
},
{
grouping: ['1', '1'],
cleanertype: 'type1',
cleanerweight:10,
},
{
grouping: ['1', '2'],
cleanertype: 'type2',
cleanerweight:10,
},
// Home/room2
{
grouping: ['2'],
location: 'Home',
room: 'room2',
cleanertype: '',
totalweight: 60
},
{
grouping: ['2', '1'],
cleanertype: 'type1',
cleanerweight:10,
},
{
grouping: ['2', '2'],
cleanertype: 'type2',
cleanerweight:10,
},
{
grouping: ['3'],
location: 'Work',
room: 'room1',
cleanertype: '',
cleanerweight: 30,
totalweight: 60
},
{
grouping: ['3', '1'],
cleanertype: 'general',
cleanerweight:10,
},
{
grouping: ['3', '2'],
cleanertype: 'heavyduty',
cleanerweight: 10,
},
];
所以我正在使用 grouping
来控制 grouping/nesting,而且效果很好,这正是我想要的。
可以看到工作示例here。
不确定如何用文字准确解释这一点,但我认为通过几个例子就可以理解
在 this first example 中,我仅按一列分组,位置。在位置字段中,我在路径中使用 spaces,即 location: ['Home', ''],
(1 space), location: ['Home', ' '],
(2 spaces) 这样我就可以有 2 个其他列作为主行的“详细信息”(即在此示例中清洁器类型和清洁器重量)
看起来像这样:
也许有更好的方法来做到这一点,但如果我只想按一列分组,这在上面会起作用。
但是,我实际上想按 两个 列进行分组,但只有那 2 个详细(子)记录“嵌套”)。
在上面,我还想按 room 分组,但没有 room 作为嵌套行。
所以,在上面我有(location=Home, room=room1)
,但我也可能有(location=Home, room=room2)
,即我有room2
例如:
我尝试了各种方法,但就是无法得到这个视图(我总是以不需要的嵌套结束),例如,这就是我不想要的:
有没有办法实现这种视图?
我从 this post 中找到了执行此操作的方法。
所以在这个例子中,你可以用一个完全不同的属性 完全没有显示在网格中 getDataPath
来控制分组,然后用 valueGetter
放什么你想要在分组列中。
所以我可以有以下....
var gridOptions = {
columnDefs: [
// we're using the auto group column by default!
{ field: 'room',resizable: true, },
{ field: 'cleanertype', resizable: true, },
{ field: 'cleanerweight',aggFunc: 'sum', resizable: true, },
{ field: 'totalweight', resizable: true, },
],
defaultColDef: {
flex: 1,
},
autoGroupColumnDef: {
headerName: 'location',
sortable: true,
resizable: true,
filter: 'agTextColumnFilter',
valueGetter: (params) => {
return params.node.data.location; // <--- what to show in the group column
},
cellRendererParams: {
suppressCount: true,
},
},
rowData: rowData,
treeData: true, // enable Tree Data mode
animateRows: true,
groupDefaultExpanded: -1, // expand all groups by default
getDataPath: function (data) {
return data.grouping; // <= how to group/nest
},
};
和数据...
var rowData = [
// Home/room1
{
grouping: ['1'],
location: 'Home',
room: 'room1',
cleanertype: '',
totalweight: 60
},
{
grouping: ['1', '1'],
cleanertype: 'type1',
cleanerweight:10,
},
{
grouping: ['1', '2'],
cleanertype: 'type2',
cleanerweight:10,
},
// Home/room2
{
grouping: ['2'],
location: 'Home',
room: 'room2',
cleanertype: '',
totalweight: 60
},
{
grouping: ['2', '1'],
cleanertype: 'type1',
cleanerweight:10,
},
{
grouping: ['2', '2'],
cleanertype: 'type2',
cleanerweight:10,
},
{
grouping: ['3'],
location: 'Work',
room: 'room1',
cleanertype: '',
cleanerweight: 30,
totalweight: 60
},
{
grouping: ['3', '1'],
cleanertype: 'general',
cleanerweight:10,
},
{
grouping: ['3', '2'],
cleanertype: 'heavyduty',
cleanerweight: 10,
},
];
所以我正在使用 grouping
来控制 grouping/nesting,而且效果很好,这正是我想要的。
可以看到工作示例here。