如何配置Kendo UI网格,以便仅针对特定(显示)字段发出请求?
在我的实例中,Kendo UI网格绑定到OData服务。该服务公开一个包含许多(200+)个字段的表。该应用程序允许用户配置网格的显示字段集,设置初始过滤器和排序参数。该应用程序配置网格,然后关闭并查询OData服务。
网格kendo.Data.DataSource定义为:
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: ...
}
这是Grid发布的示例请求(由Firebug捕获):
http://localhost:22411/Data/Comp?%24inlinecount=allpages&%24top=1000&%24filter=DistrictCode+eq+%27460800%27
这将返回表的所有字段,这是一个问题。需要通过仅选择所需字段来限制字段,其请求如下所示:
http://localhost:22411/Data/Comp?%24inlinecount=allpages&%24top=1000&%24filter=DistrictCode+eq+%27460800%27&%24select=DistrictCode,DistrictName,DistrictNumber
同样,如何为此配置网格?
我意识到源代码可用于Kendo UI,但我目前仍在使用不包含源代码的试用版。
答案 0 :(得分:0)
我想我自己有一个可行的解决方案。我在这篇博文中使用了一个想法:
我附加了一个事件处理程序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论坛:http://www.kendoui.com/forums/framework/data-source/configure-the-kendo-ui-datasource-so-it-would-issue-requests-only-for-specific-displayed-fields.aspx#2131604
答案 1 :(得分:0)
我遇到了类似的问题并实现了一种方法,该方法在传输的dependencies {
classpath 'com.android.tools.build:gradle:1.3.0'
}
回调中构建了一系列包含的列:
data
如果您使用的是列菜单并且隐藏了列,则还可以根据可见的列进行过滤,并在启用列时强制网格刷新。
dataSource.transport.read.data = function(options) {
var data = {};
data["$select"] = columns.map(function(c) {
return c.field;
});
return data;
}