有没有办法有条件地添加"空"行到ui网格模型?我的项目要求规定我们按日期显示项目(非常简单),但是在没有项目的日子里也会显示空行,以便用户可以一目了然地看到这些差距(更加困难)。
与被询问的内容in this question有些一致,或许按日期进行某种分组,并为没有关联项目的日期插入一个空组可能有效......?
我可以创建一个全新的集合模型,它结合日期和我的实际数据,并使用ui-grid,但这看起来非常不优雅,因为当进行更改时,可能需要大量手动重新加载所有内容。数据。理想情况下,我只想将我的数据行集合提供给网格,但仍然只显示一个额外的行,其中只包含当前没有项目的日期的日期字段。
我实际上现在正在使用表格和ng-repeat进行设置,但是我希望切换到ui-grid或类似设备以获得虚拟滚动的好处,因为我有很多可编辑的(因此,完全约束的数据。
提前致谢...
答案 0 :(得分:1)
这样的事情会满足您的需求吗?
function fillInEmptyDates(startDate, endDate, data) {
var dateToCheck = moment(startDate);
var end = moment(endDate);
var finished = false;
while (!finished) {
if (!Enumerable.from(data).any(function (x) { return dateToCheck.diff(x.YourEntityDateField, 'days') === 0; })) {
var newEntity = { "YourEntityDateField": dateToCheck.clone().toDate() };
data.unshift(newEntity);
};
dateToCheck.add(1, 'days');
if (dateToCheck.diff(end, 'days') === 0) {
finished = true;
}
}
}
被称为......
fillInEmptyDates(new Date(2014, 6, 30), new Date(2014, 10, 25), $scope.gridOptions.data);
您可以将第一个日期作为当前数据的最小值,将结束日期作为最大值,或根据您的需要进行调整。
请注意,我使用MomentJS进行日期操作,使用LinqJS查看数据的日期。我确定如果您愿意,可以使用简单的方法循环访问数据,而无需使用LinqJS。 (我是JavaScript的新手,发现自己迷上了以前在C#中做过的LINQ事情。)
您在网格选项中指定的排序应该应用于新创建的行。
(旁注:您可能需要使用时区来准确获取所需的值。如果您看到有数据的日期重复,那么可能是由于此原因。)