Kendo Grid Custom Flter Mengatur Nilai Filter Secara Terprogram

Saya mencoba mengatur nilai filter dari Filter Kustom Kendo Grid secara terprogram. Saya menerapkan nilai filter baru saya seperti:

gridOptions.dataSource.filter = [
    {
      field: 'MyField',
      operator: 'eq',
      value: newTextValue
    }
];

Definisi bidang saya dalam opsi kisi terlihat seperti:

{
     width: '140px',
     title: 'MyFieldTitle',
     field: 'MyField',
     filterable: getFieldFilter()
}

Dengan filter berikut:

function getFieldFilter() {
  return {
    cell: {
      template: function (args) {
        var element = args.element;

        element.kendoComboBox({
          dataSource: {
            transport: {
              read: 'api/Items'
            }
          },
          valuePrimitive: true,
          dataTextField: 'Description',
          dataValueField: 'Code'
        });
      },
      showOperators: false
    }
  };
}

Jika saya menerapkan filter seperti yang ditunjukkan di atas, itu hanya berfungsi setelah saya mengklik kendoComboBox di kolom dan mengklik lagi di luarnya. Pikiran awal saya adalah kendo grid tidak akan menerapkan dataValueField dan hanya mengatur dataTextField. Ketika saya memeriksa permintaan yang dikirim kendo grid ke server, saya melihat bahwa itu dikirim ke nilai yang disimpan di kendoComboBox itu sendiri (teks) dan bukan nilai di belakangnya.

Jika saya memilih sesuatu di kendoComboBox dari UI, semuanya berfungsi dengan baik. Tapi kalau saya atur secara terprogram seperti di atas, tidak.

Apakah saya perlu menyegarkan beberapa jenis status agar kendoComboBox menyegarkan nilai internalnya atau bagaimana cara mengatasi masalah ini?

EDIT: Apa yang saya coba lakukan adalah mendapatkan nilai kendoCombobox dari grid.

var currentlyAppliedFilters = grid.dataSource.filter().filters;
for (var filter of currentlyAppliedFilters) {
    if (filter.field === 'MyField') {
      var currentlyApplied = filter.value;
    }
}

Jadi kode di atas, akan memberi saya properti Description dari item di kendoCombobox, tetapi yang sebenarnya saya ingin dapatkan adalah properti Code.


person Thomas Gassmann    schedule 04.12.2017    source sumber


Jawaban (1)


Awalnya ketika dataSource tidak memiliki filter, filter sel memerlukan label opsi. sehingga nilai ke-1 tidak muncul sesuai pilihan.

misalnya : contoh dojo dengan optionLabel

 args.element.kendoDropDownList({
                                dataSource: args.dataSource,
                                optionLabel: "Select a color...",
                                dataTextField: "color",
                                dataValueField: "color",
                                valuePrimitive: true
                            });

jika Anda memerlukan kisi untuk memfilter saat mengikat, filter default harus ditambahkan ke sumber data

misalnya: contoh dojo dengan Filter DataSource

 dataSource: { 
          data:[ { color: "#ff0000", size: 30 }, { color: "#000000", size: 33 }] ,
          filter: { field: "color", operator: "eq", value: "#ff0000" }
                    }

Semoga ini membantu.

person cwishva    schedule 05.12.2017
comment
Dalam kasus saya sepertinya berbeda, karena saya menggunakan dataTextField dan dataValueField yang berbeda atau karena saya memiliki kendoDropDownList dengan input teks. - person Thomas Gassmann; 07.12.2017