javascript - 如何按 2 列分组,但值在同一行
问题描述
不知道如何用语言准确地解释这一点,但我认为有几个例子会很有意义
在第一个示例中,我仅按一列location进行分组。在位置字段中,我在路径中使用空格,即location: ['Home', ''],
(1 个空格)、location: ['Home', ' '],
(2 个空格),因此我可以将 2 个其他列作为主行的“详细信息”(即在此示例中为清洁器类型和清洁器重量)
它看起来像这样:
也许有更好的方法可以做到这一点,但如果我只想按一列分组,这将在上面起作用。
但是,我实际上想按两列分组,但只有这 2 个详细(子)记录“嵌套”)。
在上面,我也想按房间分组,但没有房间作为嵌套行。
所以,在上面我有(location=Home, room=room1)
,但我也可能有(location=Home, room=room2)
,即我有room2
例如会这样:
我已经尝试了各种各样的事情,但就是无法得到这个视图(我总是以不需要的嵌套结束),例如这是我不想要的:
有没有办法做这种观点?
解决方案
我从这篇文章中找到了做到这一点的方法。
所以在这个例子中,你可以使用一个完全不同的属性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
用来控制分组/嵌套,并且工作得很好,这正是我所追求的。
可以在这里查看工作示例。
推荐阅读
- apache-spark - 深入了解 Spark 与 Hive 的交互
- python - 使用 tkinter 在主窗口的拆分框架上运行命令
- javascript - 浏览器请求和 curl 请求有什么区别?
- javascript - Nodejs 数据库监控
- google-cloud-platform - Compute Engine CSR 之间的 OSPF
- node.js - 如何将rest api与前端网站/应用程序集成?
- python - re.findall() 正在工作,但现在找不到我需要的模式
- c# - 如何让我的 API 生成所需的多层 JSON 脚手架?
- vue.js - Vue Vuetify。在 v-for 循环中时,v-checkbox 的 v-model 没有采用正确的值
- android - `RecylerView.ViewHolder` 实例应该被 GC 处理时是否有回调?