有人可以帮助我以角度编程方式选择一个剑道网格行 . 我可以按行号选择一行 . 我无法找到一种方法来根据列的内容选择一行 .
HTML:
<body ng-controller="MainCtrl">
<p>Hello {{name}}!</p>
<div kendo-grid="myGrid" k-options="myOptions" k-selectable="'row'" k-on-change="myGridChange()"></div>
</body>
JS:
var app = angular.module('plunker', ['kendo.directives']);
app.controller('MainCtrl', function($scope) {
$scope.name = 'World';
$scope.myOptions = {
columns:[
{
field: 'ID'
},
{
field: 'FirstName'
},
{
field: 'LastName'
},
],
dataSource: [
{ID:139, FirstName:'John', LastName:'Doe'},
{ID:250, FirstName:'Jane', LastName:'Smith'},
{ID:376, FirstName:'Henry', LastName:'Rocks'}
],
dataBound:function(e) {
var grid = e.sender;
grid.select("tr:eq(2)");
grid.select("tr[FirstName='Henry'])"); // This doesn't work
}
};
$scope.myGridChange = function(){
var selectedRows = $scope.myGrid.select(); // This doesn't work
console.log($scope.myGrid.dataItem(selectedRows[0]));
};
});
此外,当以编程方式选择行时,我的网格更改事件中出现错误 . 手动选择行时,它工作正常 .
4 回答
你应该把你的“tr” Build 在id / uid上 . 如果你检查元素,它会告诉你在该表行中有什么属性 .
将您的dataBound更改为此,这将搜索该搜索词的整行:
或者仅基于单个列进行搜索,请执行以下操作:
至于你的控制台错误,在索引页面的网格上添加
id="grid"
,并将myGridChange替换为:您收到控制台错误,因为网格没有附加到数据绑定功能中的select命令上的$ scope,导致网格引用为null . 我不太了解angular JS,但我通过分配网格和ID然后从该ID选择器获取网格,在上面做了一个hack解决方案 .
同样的问题:调用 $scope.myGrid.select(someRow) 不起作用 . 代码不会抛出异常,但它只是忽略了调用 .
为了使它工作,我把它放在一个setTimeout:
它不优雅,但它没有太多的LoC . 我希望Telerik将在未来的版本中解决这个问题 .
程序员
使用你可能无法实现的剑道版本 . 使用最新版本,您可以这样做:
“改进myGridChange()”:
1.改变
至
2.改变
至
基本上,您应该将所选行保存在模型/控制器中的某个位置 .
以编程方式选择一行
这是将Kendo代码与AngularJs混合使用 . 有时我们必须这样做,但让我们尽可能地避免它 .
快速回答是没有办法做到这一点 . 你要做的是:
将CSS样式添加到行 .
修改模型以记住以编程方式选择的行 .
我的网页上的答案很长here . 是的,我经历了你所做的同样的痛苦 .