如何在主细节 KendoUI 网格中的所有细节网格中只选择一个行?
How to have only one selected row across all details grid in a master detail KendoUI grid?
我有一个显示客户列表的 KendoUI 网格(主要部分)。每个客户都可以有一个用户列表(详细信息部分)
Html 页数:
<kendo-grid options="mainGridOptions" k-on-change="onSelectedCustomerChanged({selected:data})">
<div k-detail-template>
<div>
<div kendo-grid k-options="detailGridOptions(dataItem)" k-on-change="onSelectedUserChanged({selected:data})"></div>
</div>
</div>
js文件:
$scope.mainGridOptions = {
toolbar: ["excel"],
columns: [{ field: "Fullname"}, { field: "Country.CountryName"}],
selectable: "row",
dataSource: {
transport: {
read: function (e) {
$http.post("Services/Customer.svc/GetCustomers").
success(function (data, status, headers, config) {
e.success(data.d);
}).
error(function (data, status, headers, config) {
alert('something went wrong');
console.log(status);
});
}
}
}
};
$scope.detailGridOptions = function (dataItem) {
return {
selectable: "row",
dataSource: dataItem.Users,
columns: [{ field: "UserName" },{ field: "Email" },{ field: "FullName" }]
};
};
我的数据看起来像:
customer 1 France
user1 user1@domain.tld user 1
user2 user2@domain.tld user 2
user3 user3@domain.tld user 3
customer 2 U.K.
user4 user4@domain.tld user 4
user5 user5@domain.tld user 5
我可以点击客户行和用户行。
当我点击用户 4 时,整行被选中。
如果我单击用户 2,则会选择用户 2 的行,但仍选择用户 4 的行。
我想一次只选择 1 个用户。
我不知道这是否可能(以及如何做到)。
任何帮助,将不胜感激。
谢谢
详细GridOptions添加:
change: $scope.onDetailChange
和方法:
$scope.onDetailChange = function (arg) {
var grid = arg.sender;
if ($scope.selectedStageRow != null && $scope.selectedStageRow.attr("data-uid") !== this.select().attr("data-uid")) {
$scope.selectedStageRow.removeClass("k-state-selected");
}
var selected = this.select();
$scope.selectedStageRow = selected;
$scope.selectedItem = grid.dataItem(selected);
};
您可以使用更改事件来检测何时选择了一行:
http://docs.telerik.com/kendo-ui/api/javascript/ui/grid#events-change
然后在更改事件中,如果选择了一行,找到所有其他详细信息网格并使用 clearSelection() 方法取消选择任何当前选择的行:
change: function(e) {
if (this.select().length == 0) return;
var curGrid = this.element;
$("#grid .k-detail-cell .k-grid").each(function(idx, elem){
if ($(elem)[0] != curGrid[0]){
//clear previous selection
$(elem).data('kendoGrid').clearSelection()
}
});
}
我有一个显示客户列表的 KendoUI 网格(主要部分)。每个客户都可以有一个用户列表(详细信息部分)
Html 页数:
<kendo-grid options="mainGridOptions" k-on-change="onSelectedCustomerChanged({selected:data})">
<div k-detail-template>
<div>
<div kendo-grid k-options="detailGridOptions(dataItem)" k-on-change="onSelectedUserChanged({selected:data})"></div>
</div>
</div>
js文件:
$scope.mainGridOptions = {
toolbar: ["excel"],
columns: [{ field: "Fullname"}, { field: "Country.CountryName"}],
selectable: "row",
dataSource: {
transport: {
read: function (e) {
$http.post("Services/Customer.svc/GetCustomers").
success(function (data, status, headers, config) {
e.success(data.d);
}).
error(function (data, status, headers, config) {
alert('something went wrong');
console.log(status);
});
}
}
}
};
$scope.detailGridOptions = function (dataItem) {
return {
selectable: "row",
dataSource: dataItem.Users,
columns: [{ field: "UserName" },{ field: "Email" },{ field: "FullName" }]
};
};
我的数据看起来像:
customer 1 France
user1 user1@domain.tld user 1
user2 user2@domain.tld user 2
user3 user3@domain.tld user 3
customer 2 U.K.
user4 user4@domain.tld user 4
user5 user5@domain.tld user 5
我可以点击客户行和用户行。
当我点击用户 4 时,整行被选中。 如果我单击用户 2,则会选择用户 2 的行,但仍选择用户 4 的行。 我想一次只选择 1 个用户。
我不知道这是否可能(以及如何做到)。 任何帮助,将不胜感激。 谢谢
详细GridOptions添加:
change: $scope.onDetailChange
和方法:
$scope.onDetailChange = function (arg) {
var grid = arg.sender;
if ($scope.selectedStageRow != null && $scope.selectedStageRow.attr("data-uid") !== this.select().attr("data-uid")) {
$scope.selectedStageRow.removeClass("k-state-selected");
}
var selected = this.select();
$scope.selectedStageRow = selected;
$scope.selectedItem = grid.dataItem(selected);
};
您可以使用更改事件来检测何时选择了一行:
http://docs.telerik.com/kendo-ui/api/javascript/ui/grid#events-change
然后在更改事件中,如果选择了一行,找到所有其他详细信息网格并使用 clearSelection() 方法取消选择任何当前选择的行:
change: function(e) {
if (this.select().length == 0) return;
var curGrid = this.element;
$("#grid .k-detail-cell .k-grid").each(function(idx, elem){
if ($(elem)[0] != curGrid[0]){
//clear previous selection
$(elem).data('kendoGrid').clearSelection()
}
});
}