我是 slickgrid 的新手。我已经浏览了几个 slickgrid 的例子,并且对基础知识很好。我有一个场景,我需要基于多列进行分组,但 slickgrid 分组基于单列。
如何在 slickgrid 中进行多列分组,并在每个组上进行展开和折叠功能?
任何了解此解决方案的人,请以基本方式解释,因为我是 slickgrid 的新手。
我的要求就像在此链接slickgrid-grouping-example中对行本身进行分组。此示例用于基于一列进行分组。我的要求是基于多列分组
我是 slickgrid 的新手。我已经浏览了几个 slickgrid 的例子,并且对基础知识很好。我有一个场景,我需要基于多列进行分组,但 slickgrid 分组基于单列。
如何在 slickgrid 中进行多列分组,并在每个组上进行展开和折叠功能?
任何了解此解决方案的人,请以基本方式解释,因为我是 slickgrid 的新手。
我的要求就像在此链接slickgrid-grouping-example中对行本身进行分组。此示例用于基于一列进行分组。我的要求是基于多列分组
我知道这个问题已经过时了,但不久前我实现了这个功能,并在我的名字下在 Github 上的 SlickGrid 项目队列中收到了一个拉取请求。您也许可以尝试一下并给我一些反馈。为此,我修改了 3 个文件,包括示例文件。在这一点上,我不知道我的提交是否会被接受,因此请自行承担风险,尽管我对我的解决方案非常有信心,因为我已经在工作中使用它。这是它的链接:https ://github.com/mleibman/SlickGrid/pull/522/files
这是 3 个多列分组的示例,此代码部分也来自example-grouping.html
我修改过的文件。定义多个分组使用数组,与之前的实现非常相似,只是在定义多个分组时将其包装在数组中。
function groupByDurationPercentageStart() {
dataView.groupBy(
["duration", "percentComplete", "start"],
[
(function (g) {
return "Duration: " + g.value + " <span style='color:green'>(" + g.count + " items)</span>";
}),
(function (g) {
return "Complete: " + g.value + " <span style='color:green'>(" + g.count + " items)</span>";
}),
(function (g) {
return "Start Date: " + g.value + " <span style='color:green'>(" + g.count + " items)</span>";
})
],
[
function (a, b) {
return a.value - b.value;
},
function (a, b) {
return a.value - b.value;
},
function (a, b) { // string sorting
var x = a.value, y = b.value;
return x == y ? 0 : (x > y ? 1 : -1);
}
]
);
dataView.setAggregators([
new Slick.Data.Aggregators.Avg("percentComplete"),
new Slick.Data.Aggregators.Sum("cost")
], true, false);
}
希望它对你们有帮助,现在它确实具有所有功能,我喜欢这个网格 =)
我想您正在寻找这样的功能?
http://bit.ly/JTlf0z 或 http://bit.ly/KuncBU
以上示例来自 ExtJS 网格和 jQuery.easyUI 插件。
这似乎是目前 SlickGrid 中不可用的东西(我不是 SlickGrid 专业人士,这正是我从一些谷歌搜索中推断出来的)。您很可能必须自己编写代码。
(当然,如果您不想切换到上述网格之一;)。)
挖掘源代码,找到它生成列和列标题的位置并开始处理它。您可以查看上面提到的其他网格以获取有关实现此功能的一些指导(关于使用的 HTML 标记和 CSS)。
您很可能必须修改“列”数组的定义方式,以在列分组标题中包含数据。
就像是:
var columns = [
{title:'Group 1', columns:[
{id: "field1", name: "Field 1", field: "field1"},
{id: "field2", name: "Field 2", field: "field2"},
]},
{id: "field3", name: "Field 3", field: "field3"},
{title:'Group 2', columns:[
{id: "field4", name: "Field 4", field: "field4"},
{id: "field5", name: "Field 5", field: "field5"},
{id: "field6", name: "Field 6", field: "field6"},
]}
];
然后修改列生成代码以检查是否存在嵌套的“列”字段并使用它来生成列标题?
只是一个想法:)。希望这会有所帮助。
实际上,光滑的网格分组不仅限于一列。
查看 DataView API 的 groupBy 方法。它具有以下签名:
function groupBy(valueGetter, valueFormatter, sortComparer){...}
所以你感兴趣的是第一个参数。它可以是一个字符串,表示要分组的单个列名,也可以是一个函数。达达!
长话短说,以下是如何按多列分组:
dataView.groupBy(
//Grouping value
function (row) {
return row["groupColumn1"]+":"+row["groupColumn2"]+":"+row["groupColumn3"];
},
//Group display
function (group) {
var values = g.value.split(":", 3); //3 is number of grouping columns*
return "Col1: "+values[0]+", Col2: "+values[1]+", Col3:" + values[2];
},
//Group comparator/sorting
function (a, b) {
return a.value - b.value;
}
);