过滤不起作用,剑道网格 [英] Filtering is not working, kendo grid
本文介绍了过滤不起作用,剑道网格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我用
kendo.dynamic.linq.DataSourceResult
在服务器端实现过滤。
[AcceptVerbs(GET,POST)]
public DataSourceResult Filter(Models.DataSourceRequest request)
{
if(request!= null)
{
request.Filter.Field = request.Filter.Filters.FirstOrDefault()。Field;
request.Filter.Operator = request.Filter.Filters.FirstOrDefault()。运算符;
request.Filter.Value = request.Filter.Filters.FirstOrDefault()。Value;
var o = request;
}
var employees = db.Users.OrderBy(ii => ii.Id).Select(x => new RegisterBindingModel()
{
Id = x。 Id,
Email = x.Email,
UserName = x.UserName,
FirstName = x.FirstName,
LastName = x.LastName,
Age = x。年龄,
电话= x.Phone,
部门= x.Department
});
var i = employees.ToDataSourceResult(request.Take,request.Skip,request.Sort,request.Filter);
var data = i.Data; //这包含过滤后的数据
request.Take = i.Total;
var d = Json(数据);
System.Diagnostics.Debug.WriteLine(d);
var aa = data.Cast< RegisterBindingModel>()。ToList();
var b = aa;
//返回内容(HttpStatusCode.OK,d.Content);
返回employees.ToDataSourceResult(request.Take,request.Skip,request.Sort,request.Filter);
//返回data.Cast< RegisterBindingModel>()。ToList();
}
嗯,我在这个请求正文中看到了来自fiddler的过滤数据。 />
我尝试了什么:
我使用以下代码,我想要使用过滤数据更新网格,但不是这样,网格更新了一页内的所有数据!!
$ scope.DS = new kendo.data.DataSource({
type:json,
transport:{
read:{
url:/ api / Employees,
dataType :json,
contentType:application / json,
类型:GET,
标题:{'授权':'承载'+ sessionStorage.getItem(accessToken) }
},
更新:{
url:/ api / Employees / PUT,
dataType:json,
contentType:application / json ,
输入:PUT,
标题:{'授权':'持票人'+ sessionStorage.getItem(accessToken)}
},
销毁:{
url: / api / Employees / DELETE,
dataType:json,
contentType:application / json,
type:DELETE,
headers:{'Authorization' :'Bearer'+ sessionStorage.getItem(accessToken)}},
create:{
url:/ api / Employees / POST,
dataType:json,
contentType:application / json,
类型:POST,
header:{'Authorization':'Bearer'+ sessionStorage.getItem(accessToken)}},
parameterMap:function(options,operation){
if(operation!==read){
console.log(JSON.stringif) Y(options.models));
返回JSON.stringify(options.models);
}}},
batch:true,
pageSize:5,
serverFiltering:true,
schema:{
model:{
id:Id,
数据:'数据',
总计:'总计',
//错误:'错误',
字段:{
Id :{editable:false,nullable:false,type:number},
Email:{editable:true,type:string},
UserName:{editable:true,type:string },
FirstName:{editable:true,type:string},
LastName:{editable:true,type:string},
年龄:{editable:true,验证:{required:true}},
电话:{editable:true,验证:{required:true}},
部门:{editable:true,类型:string}
}
},
});
$ scope.mainGridOptions = {
dataSource:$ scope.DS,
dataBound:function(){
var data = this.dataSource.view();
},
toolbar:[create],
columns:[
{field:Email,title:Email,width:100px},
{field:UserName,title:User Name,width:100px},
{field:FirstName,title:First Name,width:100px},
{field:LastName,title:Last Name,width:100px},
{field:Phone,title:Phone,width:100px},
{field:Age,title:Age,width:100px},
{field:Department,title:Department,width:100px},
{
命令:[{
name:edit,
text:{
edit:Edit,
update:Save,
取消:取消
}
},销毁],标题:操作,宽度:150px
}
],
filterable:true,
pageable:{
refresh:true,
input:true,
numeric:false,
pageSizes:[5,10,20,30,50,75,100,500,1000]
},
sortable:true,
resizable:true,
navigatable:true ,
serverFiltering:true,
editable:{mode:inline},
filter:function(data){
console.log((data));
console.log((data.filter));
const requestOptions = {
headers:{'Authorization':'Bearer'+ sessionStorage.getItem(accessToken)}
};
$ http.post(/ api / Account / Filter,data,requestOptions).then(function(d){
console.log(JSON.stringify(d.data.Data));
// $ scope.DS.read = d.data.Data;
debugger;
$ scope.mainGridOptions.dataSource.query(d.data.Data);
},function(){
alert(失败。请再试一次。)
});
},
noRecords:{template:没有结果。}
};
你能说出我做错了什么吗?
解决方案
scope.DS = new kendo.data.DataSource({
type:json,
transport:{
read:{
url:/ api / Employees,
dataType:json,
contentType:application / json,
type:GET,
header:{'Authorization':'Bearer' + sessionStorage.getItem(accessToken)}
},
update:{
url:/ api / Employees / PUT,
dataType:json,
contentType:application / json,
type:PUT,
headers:{'Authorization':'Bearer'+ sessionStorage.getItem(accessToken)}
},
destroy:{
url:/ api / Empl oyees / DELETE,
dataType:json,
contentType:application / json,
类型:DELETE,
标题:{'授权':'持票人'+ sessionStorage.getItem(accessToken)}},
create:{
url:/ api / Employees / POST,
dataType:json,
contentType :application / json,
类型:POST,
header:{'Authorization':'Bearer'+ sessionStorage.getItem(accessToken)}},
parameterMap:function (选项,操作){
if(operation!==read){
console.log(JSON.stringify(options.models));
返回JSON.stringify(options.models);
}}},
batch:true,
pageSize:5,
serverFiltering:true,
schema:{
model:{
id:Id,
数据:'数据',
总计:'总计',
//错误:'错误',
字段:{
Id :{editable:false,nullable:false,type:number},
Email:{editable:true,type:string},
UserName:{editable:true,type:string },
FirstName:{editable:true,type:string},
LastName:{editable:true,type:string},
年龄:{editable:true,验证:{required:true}},
电话:{editable:true,验证:{required:true}},
部门:{editable:true,类型:string}
}
},
});
scope.mainGridOptions = {
dataSource:
scope.DS,
dataBound:function(){
var data = this.dataSource.view();
},
toolbar:[create],
columns:[
{field:Email,title:Email,width:100px},
{field:UserName,title:User Name,width:100px},
{field:FirstName,title:First Name,width:100px},
{field:LastName,title:Last Name,width:100px},
{field:Phone,title:Phone,width:100px},
{field:Age,title:Age,width:100px},
{field:Department,title:Department,width:100px},
{
命令:[{
name:edit,
text:{
edit:Edit,
update:Save,
取消:取消
}
},销毁],标题:操作,宽度:150px
}
],
filterable:true,
pageable:{
refresh:true,
input:true,
numeric:false,
pageSizes:[5,10,20,30,50,75,100,500,1000]
},
sortable:true,
resizable:true,
navigatable:true ,
serverFiltering:true,
editable:{mode:inline},
filter:function(data){
console.log((data));
console.log((data.filter));
const requestOptions = {
headers:{'Authorization':'Bearer'+ sessionStorage.getItem(accessToken)}
};
Hi,
I usedkendo.dynamic.linq.DataSourceResultto implement filtering in server side.
[AcceptVerbs("GET","POST")] public DataSourceResult Filter(Models.DataSourceRequest request) { if (request != null) { request.Filter.Field = request.Filter.Filters.FirstOrDefault().Field; request.Filter.Operator = request.Filter.Filters.FirstOrDefault().Operator; request.Filter.Value = request.Filter.Filters.FirstOrDefault().Value; var o = request; } var employees = db.Users.OrderBy(ii => ii.Id).Select(x => new RegisterBindingModel() { Id = x.Id, Email = x.Email, UserName = x.UserName, FirstName = x.FirstName, LastName = x.LastName, Age = x.Age, Phone = x.Phone, Department = x.Department }); var i = employees.ToDataSourceResult(request.Take, request.Skip, request.Sort, request.Filter); var data = i.Data; // This is contain filtered data request.Take = i.Total; var d = Json(data); System.Diagnostics.Debug.WriteLine(d); var aa = data.Cast<RegisterBindingModel>().ToList(); var b = aa; // return Content(HttpStatusCode.OK,d.Content); return employees.ToDataSourceResult(request.Take, request.Skip, request.Sort, request.Filter); //return data.Cast <RegisterBindingModel>().ToList(); }
Well, I saw the filter data from fiddler in the body of this request.
What I have tried:
I used the following code, I want to update the grid with the filter data but instead of this the grid updated with all data within one page !!
$scope.DS = new kendo.data.DataSource({ type: "json", transport: { read: { url: "/api/Employees", dataType: "json", contentType: "application/json", type: "GET", headers: { 'Authorization': 'Bearer ' + sessionStorage.getItem("accessToken") } }, update: { url: "/api/Employees/PUT", dataType: "json", contentType: "application/json", type: "PUT", headers: { 'Authorization': 'Bearer ' + sessionStorage.getItem("accessToken") } }, destroy: { url: "/api/Employees/DELETE", dataType: "json", contentType: "application/json", type: "DELETE", headers: { 'Authorization': 'Bearer ' + sessionStorage.getItem("accessToken") } }, create: { url: "/api/Employees/POST", dataType: "json", contentType: "application/json", type: "POST", headers: { 'Authorization': 'Bearer ' + sessionStorage.getItem("accessToken") } }, parameterMap: function (options, operation) { if (operation !== "read") { console.log(JSON.stringify(options.models)); return JSON.stringify(options.models); }}}, batch: true, pageSize: 5, serverFiltering: true, schema: { model: { id: "Id", data: 'Data', total: 'Total', // errors: 'Errors', fields: { Id: { editable: false, nullable: false, type: "number" }, Email: { editable: true, type: "string" }, UserName: {editable: true,type: "string"}, FirstName: { editable: true, type: "string" }, LastName: { editable: true, type: "string"}, Age: { editable: true, validation: { required: true } }, Phone: { editable: true, validation: { required: true } }, Department: { editable: true,type: "string"} } } }, }); $scope.mainGridOptions = { dataSource: $scope.DS, dataBound: function () { var data = this.dataSource.view(); }, toolbar: ["create"], columns: [ { field: "Email", title: "Email", width: "100px" }, { field: "UserName", title: "User Name", width: "100px"}, { field: "FirstName", title: "First Name", width:"100px"}, { field: "LastName", title: "Last Name", width: "100px" }, { field: "Phone", title: "Phone", width: "100px" }, { field: "Age", title: "Age", width: "100px" }, { field: "Department", title: "Department", width: "100px"}, { command: [{ name: "edit", text: { edit: "Edit", update: "Save", cancel: "Cancel" } }, "destroy"], title: "Actions", width: "150px" } ], filterable: true, pageable: { refresh: true, input: true, numeric: false, pageSizes: [5, 10, 20, 30, 50, 75, 100, 500, 1000] }, sortable: true, resizable: true, navigatable: true, serverFiltering: true, editable: { mode: "inline" }, filter: function (data) { console.log((data)); console.log((data.filter)); const requestOptions = { headers: { 'Authorization': 'Bearer ' + sessionStorage.getItem("accessToken") } }; $http.post("/api/Account/Filter", data, requestOptions).then(function (d) { console.log(JSON.stringify(d.data.Data)); // $scope.DS.read = d.data.Data; debugger; $scope.mainGridOptions.dataSource.query(d.data.Data); }, function () { alert("Failed.Please try again.") }); }, noRecords: { template: "No results available."} };
Could you please tell what am I doing wrong??解决方案scope.DS = new kendo.data.DataSource({ type: "json", transport: { read: { url: "/api/Employees", dataType: "json", contentType: "application/json", type: "GET", headers: { 'Authorization': 'Bearer ' + sessionStorage.getItem("accessToken") } }, update: { url: "/api/Employees/PUT", dataType: "json", contentType: "application/json", type: "PUT", headers: { 'Authorization': 'Bearer ' + sessionStorage.getItem("accessToken") } }, destroy: { url: "/api/Employees/DELETE", dataType: "json", contentType: "application/json", type: "DELETE", headers: { 'Authorization': 'Bearer ' + sessionStorage.getItem("accessToken") } }, create: { url: "/api/Employees/POST", dataType: "json", contentType: "application/json", type: "POST", headers: { 'Authorization': 'Bearer ' + sessionStorage.getItem("accessToken") } }, parameterMap: function (options, operation) { if (operation !== "read") { console.log(JSON.stringify(options.models)); return JSON.stringify(options.models); }}}, batch: true, pageSize: 5, serverFiltering: true, schema: { model: { id: "Id", data: 'Data', total: 'Total', // errors: 'Errors', fields: { Id: { editable: false, nullable: false, type: "number" }, Email: { editable: true, type: "string" }, UserName: {editable: true,type: "string"}, FirstName: { editable: true, type: "string" }, LastName: { editable: true, type: "string"}, Age: { editable: true, validation: { required: true } }, Phone: { editable: true, validation: { required: true } }, Department: { editable: true,type: "string"} } } }, });
scope.mainGridOptions = { dataSource:
scope.DS, dataBound: function () { var data = this.dataSource.view(); }, toolbar: ["create"], columns: [ { field: "Email", title: "Email", width: "100px" }, { field: "UserName", title: "User Name", width: "100px"}, { field: "FirstName", title: "First Name", width:"100px"}, { field: "LastName", title: "Last Name", width: "100px" }, { field: "Phone", title: "Phone", width: "100px" }, { field: "Age", title: "Age", width: "100px" }, { field: "Department", title: "Department", width: "100px"}, { command: [{ name: "edit", text: { edit: "Edit", update: "Save", cancel: "Cancel" } }, "destroy"], title: "Actions", width: "150px" } ], filterable: true, pageable: { refresh: true, input: true, numeric: false, pageSizes: [5, 10, 20, 30, 50, 75, 100, 500, 1000] }, sortable: true, resizable: true, navigatable: true, serverFiltering: true, editable: { mode: "inline" }, filter: function (data) { console.log((data)); console.log((data.filter)); const requestOptions = { headers: { 'Authorization': 'Bearer ' + sessionStorage.getItem("accessToken") } };
这篇关于过滤不起作用,剑道网格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文