Kendo Grid Custom Flter ตั้งค่าตัวกรองโดยทางโปรแกรม

ฉันกำลังพยายามตั้งค่าตัวกรองของตัวกรองแบบกำหนดเองของ Kendo Grid โดยทางโปรแกรม ฉันกำลังใช้ค่าตัวกรองใหม่เช่น:

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

คำจำกัดความฟิลด์ของฉันในตัวเลือกกริดมีลักษณะดังนี้:

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

ด้วยตัวกรองต่อไปนี้:

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
    }
  };
}

หากฉันใช้ตัวกรองตามที่แสดงด้านบน จะใช้งานได้หลังจากที่ฉันคลิก kendoComboBox ในคอลัมน์แล้วคลิกด้านนอกอีกครั้ง ความคิดแรกของฉันคือกริดเคนโด้จะไม่ใช้ dataValueField และเพิ่งตั้งค่า dataTextField เมื่อฉันตรวจสอบคำขอที่กริดเคนโด้ส่งไปยังเซิร์ฟเวอร์ ฉันเห็นว่ามันกำลังส่งไปยังค่าที่เก็บไว้ใน kendoComboBox เอง (ข้อความ) และไม่ใช่ค่าด้านหลัง

ถ้าฉันเลือกบางอย่างใน kendoComboBox จาก UI ทุกอย่างก็ใช้ได้ดี แต่ถ้าผมตั้งค่าแบบโปรแกรมเหมือนด้านบน มันก็ไม่ได้เป็นเช่นนั้น

ฉันจำเป็นต้องรีเฟรชสถานะบางอย่างเพื่อให้ kendoComboBox รีเฟรชค่าภายในหรือฉันจะแก้ไขปัญหานี้ได้อย่างไร

แก้ไข: สิ่งที่ฉันกำลังพยายามทำคือการรับค่าของ kendoCombobox จากกริด

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

ดังนั้นโค้ดด้านบนจะให้คุณสมบัติ Description ของรายการใน kendoCombobox แก่ฉัน แต่สิ่งที่ฉันต้องการจริงๆ คือคุณสมบัติ Code


person Thomas Gassmann    schedule 04.12.2017    source แหล่งที่มา


คำตอบ (1)


เริ่มแรกเมื่อแหล่งข้อมูลไม่มีตัวกรอง ตัวกรองเซลล์จำเป็นต้องมีป้ายกำกับตัวเลือก เพื่อให้ค่าที่ 1 ไม่ปรากฏตามที่เลือกไว้

เช่น ตัวอย่าง dojo พร้อม optionLabel

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

หากคุณต้องการให้กริดกรองเมื่อเชื่อมโยง ควรเพิ่มตัวกรองเริ่มต้นในแหล่งข้อมูล

เช่น ตัวอย่าง dojo พร้อมตัวกรองแหล่งข้อมูล

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

หวังว่านี่จะช่วยได้

person cwishva    schedule 05.12.2017
comment
ในกรณีของฉัน ดูเหมือนว่าจะแตกต่างออกไป อาจเพราะฉันใช้ dataTextField และ dataValueField ที่แตกต่างกัน หรือเพราะฉันมี kendoDropDownList ที่มีการป้อนข้อความ - person Thomas Gassmann; 07.12.2017