迭代时,选定网格行的索引为 -1

Posted

技术标签:

【中文标题】迭代时,选定网格行的索引为 -1【英文标题】:Index is -1 on selected rows of grid while iterating 【发布时间】:2013-01-12 03:23:54 【问题描述】:

我的要求是遍历网格的所有选定行并在数据源上设置一个具有给定值的字段。我有以下代码并遍历 kendo ui 网格的选定行。

$('#grid').data("kendoGrid").select().each(function () 
                if($('#grid').data().kendoGrid.dataSource.data()[$(this).index()] != null )

                    var myItem = $('#grid').data().kendoGrid.dataSource.data()[$(this).index()];
                    myItem.set(myFiled, myValue);
                    leg.push(myItem);

                
            );

问题是在我的代码到达 myItem.set(myFiled, myValue); 行之后索引的值为 -1,即使在我的下一次迭代中它也会保持这个值。

删除 .set 方法时,我发现我没有相同的行为,并且我的索引保持正确的值。为什么会这样?

另外,这行有什么区别:

i) $('#grid').data("kendoGrid").dataItem($(this)).set(myField, myValue);

ii) $('#grid').data().kendoGrid.dataSource.data()[$(this).index()].set(myField, myValue);

我知道第一个与网格上的值有关。不幸的是,我从未设法设置 (i) 所示的值。第 (i) 行显示的代码似乎根本不适用于 set 函数。

我从这里Refresh a single Kendo grid row 和Kendo-UI grid Set Value in grid with javascript 为案例 (i) 和 (ii) 举了我的例子。

【问题讨论】:

请记住,您不能在用于迭代 jQuery.each 的数组/对象中删除/插入元素。根据您的 DataSource 定义,我认为您可以在执行 sets 时更改 DataSource。 感谢您的回复。好吧,我不打算插入/删除。正如我所说,数据源中的设置值将索引值更改为 -1 。这是我目前的主要问题。 我还注意到,一旦代码到达 .set 方法,它就会丢失网格上的选择 【参考方案1】:

我找到了解决方案/解决方法。虽然我仍然不明白为什么剑道网格索引有这种行为。

而不是在我的迭代中使用 myItem.set(myField, myValue);我将代码更改为 myItem[myField] = myValue;

使用此方法更改了值,未触发更改事件(根据需要),并且索引也根据需要保持其值。

【讨论】:

以上是关于迭代时,选定网格行的索引为 -1的主要内容,如果未能解决你的问题,请参考以下文章

获取 DataGridView 中选定行的单元格内容

剑道网格滚动到选定的行

如何设置与选定行相邻的 TableView 行的样式?

使用javascript在gridview中获取复选框选中行的相应行值

如何从另一个网格的另一个选定记录将数据添加到网格

将数组迭代到自定义网格中