angular - 根据角度中的日期列值更改剑道网格中的行颜色
问题描述
<kendo-grid
[data]="gridData"
[selectable]="false"
[kendoGridSelectBy]="'Id'"
[selectedKeys]="selectedIds"
[pageable]="{ pageSizes: gridPageSizes }"
[pageSize]="state.take"
[skip]="state.skip"
[scrollable]="'none'"
[groupable]="false"
[group]="state.group"
(dataStateChange)="dataStateChange($event)"
[filterable]="false"
[filter]="state?.filter"
[sortable]="true"
[sort]="state?.sort"
[rowClass]="rowCallBack"
>
<kendo-grid-column
field="invoiceNumber"
title="Invoice Number"
>
</kendo-grid-column>
<kendo-grid-column
title="PO"
>
<ng-template kendoGridCellTemplate let-dataItem="dataItem">
{{dataItem.PO}}
</ng-template>
</kendo-grid-column>
<kendo-grid-column
field="StatusChangedDate"
title="StatusChangedDate"
filter="date"
format="{0:d}"
>
<ng-template kendoGridCellTemplate let-dataItem>
<time>{{ dataItem.StatusChangedDate | l10nDate: language:'short' }}</time>
</ng-template>
</kendo-grid-column>
</kendo-grid>
如果 StatusChangedDate 早 1 周,我如何在 kendogrid 中为整行(或记录)着色,并在发票编号列上显示警报图像/符号以及发票编号
谢谢。
解决方案
回调函数已绑定到[rowClass]
属性。我们可以使用它来检查自日期以来是否已经过去一周StatusChangedDate
并设置自定义背景颜色。
还要注意encapsulation
组件装饰器中的选项。ViewEncapsulation.None
指示 Angular 在没有任何封装的情况下使用全局 CSS。最后在CSShighlight
选择器中添加了剑道网格CSS选择器.k-grid tr
来设置背景颜色。
以下应该这样做
import { Component, ViewEncapsulation } from '@angular/core';
import { RowClassArgs } from '@progress/kendo-angular-grid';
import { sampleData } from './data';
@Component({
selector: 'my-app',
encapsulation: ViewEncapsulation.None,
styles: [
`
.k-grid tr.highlight {
background-color: #ff6666;
}
`
],
template:
`
<kendo-grid id="grid"
[data]="gridData"
[resizable]="true"
[rowClass]="rowCallBack"
[selectable]="false"
[kendoGridSelectBy]="'Id'"
[pageable]="{ pageSizes: gridPageSizes }"
[pageSize]="20"
[skip]="true"
[scrollable]="'none'"
[groupable]="false"
[filterable]="false"
[sortable]="true">
<kendo-grid-column field="invoiceNumber" title="Invoice" width="40">
</kendo-grid-column>
<kendo-grid-column title="PO" width="80">
<ng-template kendoGridCellTemplate let-dataItem="dataItem">
{{dataItem.PO}}
</ng-template>
</kendo-grid-column>
<kendo-grid-column
field="StatusChangedDate"
title="StatusChangedDate"
filter="date"
format="{0:d}"
width="80">
<ng-template kendoGridCellTemplate let-dataItem>
<time>{{ dataItem.StatusChangedDate | date: 'dd/MM/yyyy' }}</time>
</ng-template>
</kendo-grid-column>
</kendo-grid>
`
})
export class AppComponent {
public gridData: any[] = sampleData;
public rowCallBack(context: RowClassArgs) {
const utcOld = Date.parse(context.dataItem.StatusChangedDate);
const utcNow = new Date().getTime();
if ((Math.abs(utcNow - utcOld)) > 604800000) { // 604800000 = 1 week in microseconds
return { highlight: true };
}
}
}
工作示例:Stackblitz
推荐阅读
- c# - 使用三元运算让我的代码更干净
- javascript - 使用 Webpack 5 Boilerplate 构建 Chrome 扩展时如何对其进行 chrome.runtime.reload()?
- javascript - 未关闭 MySql nodejs 上的连接导致超时 lambda AWS
- c++ - 为什么输入字符串后变量值会发生变化?
- raku - 在 raku 中连接 `s///`
- css - 为什么元素不能放在我的出现?
- scala - 在 Spark 中,对象和变量如何保存在内存中以及跨不同的执行程序?
- arrays - 使用带有数组的嵌套循环的分段错误 11
- html - 如何创建可堆叠的响应式四列(1行)网格,每个网格中都有图像并且图像是响应式的?
- c++ - 如何制作一个while循环但有更多条件C++