【发布时间】:2020-09-07 09:23:26
【问题描述】:
是否可以为 slickgrid 中的一行设置背景颜色(基于数据值)并使用分页?对于 angular-slickgrid 包。
我使用 getItemMetadata 作为建议的多个其他(旧)帖子 - 例如SlickGrid: How to loop through each row and set color based on the condition?。
这段代码:
metadata(old_metadata_provider) {
return function(row) {
var item = this.getItem(row);
var ret = (old_metadata_provider(row) || {});
if (item) {
ret.cssClasses = (ret.cssClasses || '');
if ("attribute" in item) {
return { cssClasses: 'redRow' }; //redRow is in styles.css
}
}
return ret;
}
}
电话是:
this.dataViewObj.getItemMetadata = this.metadata(this.dataViewObj.getItemMetadata);
它工作正常。但是,当我打开分页时,颜色无法按预期工作。我读到 SlickGrid 在滚动或分页时重复使用相同的行元素,并将覆盖与它们关联的样式。还有另一种方法吗?感谢您对此的任何帮助。
在阅读了 ghiscoding 的建议后,我尝试添加以下代码,但启用分页后颜色仍然不起作用。
angularGridReady(angularGrid: AngularGridInstance) {
this.angularGrid = angularGrid;
this.dataViewObj = angularGrid.dataView;
this.gridObj = angularGrid.slickGrid;
this.checkRowBackgroundColor(); //where I call the metadata function from my previous post, if the dataView object is defined.
//I added this code:
var self = this;
this.dataViewObj.onPagingInfoChanged.subscribe(function (e, dataView, grid) {
self.gridObj.invalidate();
self.gridObj.render();
});
}
【问题讨论】:
-
您确实应该在您的问题中提供更多信息,通常,您尝试过什么?显示一些代码...我只能假设您正在使用 SlickGrid Metata(这只是一个假设,因为您没有提到它),可能元数据丢失或需要在页面更改后无效/呈现,订阅页面更改事件和重新附加元数据和/或重新无效/渲染,值得一试
-
但是你可能没有尝试过我建议的任何东西?你应该...
-
ghiscoding,我尝试通过向我的网格就绪函数(由 onAngularGridCreated 调用)添加一些代码来重新无效/渲染,但颜色仍然无法正常使用分页。请参阅上面的编辑。您能否在评论中澄清“重新附加元数据”的含义?谢谢。
-
元数据可能只是在您的页面加载时分配,但在您更改页面时丢失,您可能需要在每次更改页面时放回元数据。
-
ghiscoding - 我仍然不确定您所说的“放回”元数据是什么意思?我尝试创建一个变量 myMetadata 并在初始加载时将其设置为 getItemMetadata() 。然后在 onPagingInfoChanged 处理程序中设置 dataView.getItemMetadata = 该变量,然后在其上运行我的元数据函数以设置颜色并重新渲染。但它没有用。我是 slickgrid 的新手,但我正在尝试了解元数据的工作原理。谢谢。
标签: css angular typescript pagination slickgrid