限制绑定到OData服务的Kendo UI网格的请求字段集
如何配置剑道UI网格,使其仅对特定(显示)字段发出请求 在我的实例中,kendoui网格绑定到OData服务。该服务公开了一个包含许多(200+)字段的表。该应用程序允许用户配置网格的显示字段集,设置初始过滤器和排序参数。应用程序配置网格,然后网格关闭并查询OData服务 网格kendo.Data.DataSource定义为:限制绑定到OData服务的Kendo UI网格的请求字段集,odata,kendo-ui,Odata,Kendo Ui,如何配置剑道UI网格,使其仅对特定(显示)字段发出请求 在我的实例中,kendoui网格绑定到OData服务。该服务公开了一个包含许多(200+)字段的表。该应用程序允许用户配置网格的显示字段集,设置初始过滤器和排序参数。应用程序配置网格,然后网格关闭并查询OData服务 网格kendo.Data.DataSource定义为: var gridDataSource = new kendo.data.DataSource({ type: "odata", transport: {
var gridDataSource = new kendo.data.DataSource({
type: "odata",
transport: {
read: {
url: "@Url.Content(dynDataSource.Url)",
contentType: "application/json; charset=utf-8",
type: "GET",
dataType: "json"
}
},
pageSize: @Model.MaxPageSize,
serverPaging: true,
serverFiltering: true,
serverSorting: true,
filter: ...
}
以下是网格发布的示例请求(由Firebug捕获):
这将返回表的所有字段,这是一个问题。需要通过仅选择所需字段来限制字段,请求如下所示:
http://localhost:22411/Data/Comp?%24inlinecount=allpages&%24top=1000&%24filter=DistrictCode+eq+%27460800%27&%24select=DistrictCode,DistrictName,DistrictNumber
同样,如何配置网格以实现这一点
我意识到剑道用户界面的源代码是可用的,但我目前仍在试用版本,其中不包括源代码 我想我自己也有一个可行的解决办法。我使用了这篇博文中的一个想法: 我将事件处理程序附加到ajaxSend事件中,监视我的OData服务URL,一旦检测到这样的请求,就将
select
列列表附加到URL。代码如下:
$(document).ajaxSend(function (e, jqxhr, settings) {
if (settings.url.toLowerCase().indexOf("@Url.Content(dynDataSource.Url)".toLowerCase()) >= 0) {
settings.url += "&%24select=@requestColumnList";
}
});
希望这有帮助。不过,如果有人有更好的解决方案,我还是想听一听
我也在Telerik论坛上发布了这个问题:我遇到了一个类似的问题,并实现了一种方法,在传输的读取
数据
回调中构造一个包含列的数组:
dataSource.transport.read.data = function(options) {
var data = {};
data["$select"] = columns.map(function(c) {
return c.field;
});
return data;
}
如果您使用的是“列”菜单且具有隐藏列,则还可以根据哪些列可见进行筛选,并在启用列时强制网格刷新
columnShow: function (e) {
e.sender.dataSource.read();
}
columnShow: function (e) {
e.sender.dataSource.read();
}