angular - 使用 kendo 的列选择器在 kendo 网格中加载带有代码的列
问题描述
看看我在这里准备的 stackblitz 。
使用ColumnChooserComponent
如上所示,我想实现两件事:
- 找出当前可见的列。
- 使用
string[]
带有列名的 a ,我想以编程方式显示/隐藏列。
目标是最终将这些值存储在服务器中的某个json
位置,然后根据用户的设置加载它们。我已经阅读了文档(网格和列选择器),但到目前为止我所得到的只是所有列的列表,不知道哪些是可见的,哪些是不可见的。理想情况下,我希望您完成我在 stackblitz 中留空的功能,logVisible
并且loadFromArray
使用我上面描述的功能。
任何帮助将不胜感激。提前致谢。
更新:我正在寻找的答案是用户StepUp的更新 1。
更新 2 和澄清:我最终使用的解决方案看起来像我下面的答案。
对于将来对此感兴趣的任何人,事实证明所做的ColumnChooserComponent
只是设置网格hidden
中每个ColumnBase
元素的属性。这些是从grid.columnList
(假设grid
是GridComponent
参考)访问的。用于forEach
迭代,toArray
如果您只想将它们全部存储在内存中。这意味着如果您不喜欢默认的ColumnChooserComponent
. 知道有用。
解决方案
可以创建所需列的字符串数组,并在加载网格时显示它们:
testCols: string[] = ['ProductID', 'ProductName', 'QuantityPerUnit'];
和html:
<kendo-grid #grid [data]="gridData" [height]="410">
<ng-template ngFor [ngForOf]="testCols" let-column>
<kendo-grid-column field="{{column}}">
<ng-template kendoGridHeaderTemplate let-dataItem>
{{dataItem.field}}
</ng-template>
<ng-template kendoGridCellTemplate let-dataItem>
<p> {{ dataItem[column] | json }} </p>
</ng-template>
</kendo-grid-column>
</ng-template>
</kendo-grid>
更新:
然后你可以使用hidden
.kendo-grid-column
因此,您可以创建一个数组,hiddenColumns
然后只需推送应该隐藏的列。
然后在保存用户设置后,您可以将隐藏的列推送到hiddenColumns
.
打字稿:
public hiddenColumns: string[] = [];
HTML:
<kendo-grid [data]="gridData" style="height:400px">
<ng-template ngFor [ngForOf]="columns" let-column>
<kendo-grid-column
field="{{column}}"
[hidden]="hiddenColumns.indexOf(column) > -1"
>
<ng-template kendoGridHeaderTemplate let-dataItem>
{{dataItem.field}}
<button
(click)="hideColumn(dataItem.field)"
class="k-button k-primary"
style="float: right;"
>
Hide
</button>
</ng-template>
</kendo-grid-column>
</ng-template>
</kendo-grid>
更新 1:
您可以创建一个数组choosenColumns
:
choosenColumns: any[] = [];
// Use this function to console.log currently visible columns.
public logVisible = (grid) => {
if (this.choosenColumns.length == 0) {
this.choosenColumns = grid.columnList.columns._results
.filter(f => f.isVisible)
.map(s=> s.field);
}
}
// Use this function to load columns from a string[].
public loadFromArray = () => {
this.grid.columnList.columns._results.forEach(c => {
if (!this.choosenColumns.includes(c.field)) {
c.hidden = false;
console.log(c.field, c.hidden);
}
})
}
推荐阅读
- python-3.x - 获取具有相同值的对象(Flask)
- c++ - 面部轮廓被检测为具有相同绘图的 2 个轮廓
- docker - 是否可以通过 container_name:port 从一个容器调用 api 到 docker 环境中的另一个容器?
- coq - 使用 Coq 定义箭头是参数化函数的类别
- excel - Excel 列处理
- vue.js - Vue阻止组件链接不起作用
- flutter - 如何处理flutter中的“Permission Denied”异常?
- apache-zookeeper - 多少个zookeeper节点合适?
- html - 如何在导航栏中在css中制作全高并在一行中显示四张卡片
- javascript - 在 Phaser.js 中添加移动功能