过滤不起作用,剑道网格 [英] Filtering is not working, kendo grid

查看:80
本文介绍了过滤不起作用,剑道网格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述





我用

 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 used

kendo.dynamic.linq.DataSourceResult

to 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆