2013-06-24 3 views
1

У меня есть эта сеткафильтр кендо UI сетки с объектом поданной типа

$("#address-grid").kendoGrid({ 
    dataSource: { 
     transport: { 
      read: { 
       url: "operations/get_sales_reps_addresses.php?salesRepsId=" + salesRepsId, 
       type: "GET" 
      }, 
      update: { 
       url: "operations/edit_address.php?salesRepsId=" + salesRepsId, 
       type: "POST", 
       complete: function (e) { 
        $("#address-grid").data("kendoGrid").dataSource.read(); 
       } 
      }, 
      destroy: { 
       url: "operations/delete_address.php", 
       type: "POST", 
       complete: function (e) { 
        $("address-grid").data("kendoGrid").dataSource.read(); 
       } 
      }, 
      create: { 
       url: "operations/add_address.php?salesRepsId=" + salesRepsId, 
       type: "POST", 
       complete: function (e) { 
        $("#address-grid").data("kendoGrid").dataSource.read(); 
       } 
      }, 
     }, 
     schema: { 
      data: "data", 
      total: "data.length", //total amount of records 
      model: { 
       id: "SalesRepId", 
       fields: { 
        AddressType: { 
         defaultValue: { 
          AddressTypeid: 1, 
          AddressTypeName: "Work" 
         } 
        }, 
        Country: { 
         defaultValue: { 
          CountryId: 38, 
          CountryName: "Canada" 
         } 
        }, 
        State: { 
         defaultValue: { 
          StateId: 4223, 
          StateName: "British Colombia" 
         } 
        }, 
        City: { 
         defaultValue: { 
          CityId: 59450, 
          CityName: "Vancouver" 
         } 
        }, 
        PostalCode: { 
         type: "string" 
        }, 
        AddressText: { 
         type: "string" 
        }, 
        IsMainAddress: { 
         type: "boolean" 
        }, 
        AddressId: { 
         type: "integer" 
        } 
       } 
      } 

     }, 
     pageSize: 3, 
    }, 
    ignoreCase: true, 
    height: 250, 
    filterable: true, 
    sortable: true, 
    pageable: true, 
    reorderable: false, 
    groupable: false, 
    batch: true, 
    navigatable: true, 
    toolbar: ["create", "save", "cancel"], 
    editable: true, 
    columns: [{ 
     field: "AddressType", 
     title: "Type", 
     editor: AddressTypeDropDownEditor, 
     template: "#=AddressType.AddressTypeName#", 
    }, { 
     field: "Country", 
     title: "Country", 
     editor: CountryDropDownEditor, 
     template: "#=Country.CountryName#", 
    }, { 
     field: "State", 
     title: "State", 
     editor: StateDropDownEditor, 
     template: "#=State.StateName#", 
    }, { 
     field: "City", 
     title: "City", 
     editor: CityTypeDropDownEditor, 
     template: "#=City.CityName#", 
    }, { 
     field: "PostalCode", 
     title: "Postal Code", 
    }, { 
     field: "AddressText", 
     title: "Address", 
    }, { 
     field: "IsMainAddress", 
     title: "Main?", 
     width: 65, 
     template: function (e) { 
      if (e.IsMainAddress == true) { 
       return '<img align="center" src ="images/check-icon.png" />'; 
      } else { 
       return ''; 
      } 
     } 
     // hidden: true 

    }, { 
     command: "destroy", 
     title: "&nbsp;", 
     width: 90 
    }, 

    ] 
}); 

Проблема заключается в том, когда я пытаюсь фильтровать по стране или государства или города, я получил ошибку

TypeError: "".toLowerCase is not a function

Я пытался измените тип страны на строку, я использую comobox, поэтому значения не определены. Я также пытался изменить тип на Object, значения отображались правильно, но я не мог фильтровать. Я получил ту же ошибку (toLowerCase)

Как это исправить?

Моя сетка очень похожа this example

и вот jsFiddle. Я только что добавил фильтр. и я все еще получаю предыдущую ошибку

Я хочу фильтровать по категории, любая помощь ??

ответ

3

Это, как вы фильтровать DATASOURCE Kendo dataSource , filter

Так получите DATASOURCE вашей сетки,

var gridDatasource = $("#address-grid").data('kendoGrid').dataSource; 

и фильтровать как в этом примере.

gridDatasource.filter({ ... }); 

Если вы предоставляете рабочий jsFiddle, вы можете получить более конкретный ответ.

конкретный ответ:

Вы добавили фильтр, поэтому для категории он не работает, потому что, как я уже говорил, является наблюдаемой, а не подал вы можете отфильтровать в виде строки.

Таким образом, вы должны указать лучше ваш фильтр для этой колонки, как это:

field: "Category", 
title: "Category", 
width: "160px", 
editor: categoryDropDownEditor, 
template: "#=Category.CategoryName#", 
filterable: { 
    extra: false, 
    field:"Category.CategoryName", 
    operators: { 
     string: { 
      startswith: "Starts with", 
      eq: "Is equal to", 
      neq: "Is not equal to" 
     } 
    } 
} 

посмотреть jsFiddle ->http://jsfiddle.net/blackjim/Sbb5Z/463/

+0

Я добавил я добавил ответ рабочий jsFiddle – Kamal

+0

@Kamal. Проверьте это. – AntouanK

+0

поиск работает, но вы нарушили выбор категории. после выбора категории вместо идентификатора категории указывается категория id. Если вы попытаетесь выполнить поиск после этого, произойдет сбой из-за целочисленного значения. Пожалуйста, проверьте его! – Kamal

Смежные вопросы