gpt4 book ai didi

angular - 如何在 Kendo Grid + Angular 4 中以编程方式设置选定行?

转载 作者:太空狗 更新时间:2023-10-29 17:21:06 24 4
gpt4 key购买 nike

我有一个基于 Angular 4 + TypeScript + Kendo UI 的应用程序。我还有一个包含用户表的页面。编辑用户后,我想通过我编辑的 ID 突出显示用户。

users: Observable<Array<User>>;
selectedId: number;
gridView: GridDataResult;

ngOnInit() {
this.users = this.route.params
.switchMap((params: Params) => {
this.selectedId = +params['id'];
return this.adminService.getUsers();
});
});
}

我还在 Kendo 文档事件中发现了“index”和“selected”字段:

selectionChange(event: SelectionEvent): void {
//?
}

我尝试在 ngOnInit 方法中以编程方式调用 selectionChange:

this.selectionChange({ index: 1, selected: true });

但我不知道如何在 selectionChange 方法的主体中设置 gridView 中的选定行。

那么,我应该如何使用gridView 来选择行呢?或者可能有更简单的方法来按 ID 选择行。

最佳答案

您可以如下所示手动选择行,我已经在我的 Kendo 网格中尝试过它可以工作,但可能需要一些改进。

定义一些必需的变量:(请在下面的代码中定义缺少的变量)

rowIndex : number =0;
isSelectedRowChanged: boolean = false;
selectedItem : any;

定义函数来设置选中的行如下:

public SetSelectedRow(index: number, isManualSelection, isSelected, isCellClick) {

var grid = this.el.nativeElement.getElementsByClassName('k-grid-content')[0];
var rows = grid.getElementsByTagName('tr');

let dataRowIndex = -1;
let selectedRow = grid.getElementsByClassName('k-state-selected')[0];
for (let i = 0; i < rows.length; i++) {
if (rows[i].className.indexOf("k-grouping-row") < 0 && rows[i].className.indexOf("k-group-footer") < 0) {

if (isManualSelection) {
this.rowIndex = 1;

if (selectedRow != null) {
selectedRow.className = String(selectedRow.className).replace(" k-state-selected", '').replace("k-state-selected", '');
}
if (rows[i].className.indexOf("k-state-selected") < 0) {
rows[i].click();
}

//Set selectedItem
for (let k = 0; k < rows[i].children.length; k++) {
if (rows[i].children[k].className.indexOf("k-group-cell") < 0 && rows[i].children[k].children[0] != null) {
rows[i].children[k].children[0].click();
break;
}
}
break;
} else {
if (this.isSelectedRowChanged) {
this.rowIndex = index + 1;
return;
}
if (selectedRow == null) {
//Set selectedItem
rows[i].className = rows[i].className + " k-state-selected";
for (let k = 0; k < rows[i].children.length; k++) {

if (rows[i].children[k].className.indexOf("k-group-cell") < 0 && rows[i].children[k].children[0] != null) {
rows[i].children[k].children[0].click();
break;
}
}
break;
}
else {
dataRowIndex++;
if (!this.isSelectedRowChanged) {
if (isSelected && !isCellClick) {
selectedRow.click();
}

break;
} else {
this.rowIndex = dataRowIndex + 1;
}
}
}
}
}
}

在将数据源分配给网格后,调用下面的函数来设置选择的第一行:

 setTimeout(() => {
this.rowIndex = 0;
this.SetSelectedRow(0, true, false, false);
}, 200);

行选择更改事件上编写以下函数:

 public OnSelection_Changed(item: any): void {
if (!item.selected) {
this.SetSelectedRow(item.index, false, true, false);
}
else {
this.SetSelectedRow(item.index, false, false, false);
}
}

同时定义单元格点击事件:

OnCellClick(dataItem, rowIndex, columnIndex) { 
if (this.selectedItem != dataItem) {
this.isSelectedRowChanged = true;
this.selectedItem = dataItem;
}
else {
this.isSelectedRowChanged = false;
}
}

关于angular - 如何在 Kendo Grid + Angular 4 中以编程方式设置选定行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43581367/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com