我们正在开发一个Web应用程序项目,因为我们正在使用Kendo UI。是否可以将第一列标题/标题设置为我们从下拉列表中选择的标题。例如: - 如果搜索序列号,序列号应位于搜索的第一列。但我无法得到它,因为我们通常以排序的方式定义列定义。根据选择,我们隐藏了列的其余部分。 例如:
xxx.GridColDef = [ {
field : "serialNo",
title : "Serial No",
}, {
field : "firstname",
title : "firstname",
}, {
field : "lastnameo",
title : "lastname",
},
从下拉列表中,如果我选择名字,则名字应该在第一列中。但我得到第一列作为序列号是否有任何方法?不为每个添加单独的列定义。
剑道版 - 2012.1.322
这应该自动完成而不是使用列重新排序而不是手动
很抱歉,如果我不清楚的话。我想要的是
在下拉列表中我有
序列号 名字 姓 DOB
最初网格将如下所示
序列号没有名字姓氏DOB
如果用户从下拉菜单中选择“名字”,则应该是这样的
名字序列号姓氏DOB
希望这会有所帮助。如果您需要更多说明,请告诉我。感谢您为此提供解决方案。
还有一件事: -
“使用当前版本的Kendo 2012.1.322小提琴”在这个小提琴中我无法从下拉菜单中选择。
答案 0 :(得分:1)
更新了答案2
当前的KendoUI网格框架不支持在代码中切换列的功能。我创建了一个新的小提琴,你不必在每个开关盒中完全重新排序列。它循环遍历列定义,如果有下拉值,则将其从数组中删除并将其放在第一个位置。我不知道你的50列和8下降是如何相互作用的,所以我很难给出一个完全准确的答案。但是在这里的多个建议之间,我希望你能找到解决办法:)
我创建了一个新的tempColumn定义变量,以便原始列定义仍然可用于其原始状态。
function onSelect(e) {
var ddlVal = this.dataItem(e.item.index()).value;
var tempColumns = columnDefinitions;
$(tempColumns).each(function(index) {
if (ddlVal == this.title) {
tempColumns.splice(index, 1);
tempColumns.splice(0, 0, this);
}
});
createGrid(tempColumns);
}
New fiddle which uses spice to re-order the columns
更新了答案
我用你当前版本的剑道创造了一个新的小提琴。您不需要更新您的版本,因为我不相信在Kendo框架内有任何方法可以做到这一点。
此解决方案涉及在从下拉列表中进行选择时重新定义列定义,然后重新创建网格。
Updated fiddle with your current version of Kendo
*出于某种原因,有时候Internet Explorer与jsfiddle的搭配并不好。此示例适用于Firefox和Chrome,但不适用于IE。如果您无法尝试使用其他浏览器来查看它,请将代码插入解决方案并进行测试。
原始答案
我提供了两种不同的解决方案。
1)您是否可以更新您的KendoUI版本?如果可以,那么您可以利用.showColumn()和.hideColumn()方法。
以下是使用KendoUI 2012.2.710的小提琴。在下拉列表的select事件中,您只需显示/隐藏相应的列。非常简单直接。
2)如果无法更新KendoUI版本,可以更改columnDefinition数组,然后重新创建网格。
在下拉列表的onSelect方法中,从columnDefinition数组中删除第一列,然后将新列对象添加到数组中。之后,删除网格div元素的内容,然后重新创建网格。
您仍然绑定到相同的数据,因此您无需再次通过线路再次获取数据。
Fiddle using your current version of Kendo 2012.1.322
〜在这两种情况下,代码都可以清理,以便更好地满足您的需求,但我只想给您一些基本功能。希望这有帮助!