ตัวกรองไดนามิก Jqgrid พร้อมแหล่งข้อมูล url

ฉันมี Jqgrid ดังนี้:

 jQuery("#jQGridDemo").jqGrid({
            url: 'http://localhost:58404/JQGridHandler.ashx',
            colNames: ['Property ID', 'Property Ref', 'Short Address', 'Scheme Code', 'Scheme Name', 'Property Type', 'Tenure Type', 'Status', 'Management Cost','Rent Charge Month','SC Charge Month'],
            colModel: [
                        { name: 'PropertyID', index: 'PropertyID', width: 70, align: "left", stype: 'text', sortable: true},
                        {name: 'PropertyType',width: 80},
                        { name: 'TenureType', index: 'TenureType', width: 80, align: "center",  sortable: true },
                        { name: 'Status', index: 'Status', width: 75,  align: "center", sortable: true },
            ],

ตารางใช้งานได้และเติมด้วย Json ที่ส่งคืนจาก URL อย่างไรก็ตาม ฉันกำลังพยายามใช้ตัวกรองแบบเลื่อนลงที่มีการเติมข้อมูลแบบไดนามิกในคอลัมน์ PropertyType และดูคำตอบของ Oleg ที่นี่: จะเพิ่มตัวกรองไดนามิกแบบเลื่อนลงโดยใช้ Jqgrid ได้อย่างไร

ฉันจึงได้เพิ่มฟังก์ชัน "beforeProcessing":

 beforeProcessing: function (data) {
                var propertyMap = {}, propertyValues = ":All", rows = data.rows, i, symbol;
                for (i = 0; i < rows.length; i++) {
                    symbol = rows[i].Symbol;
                    if (!propertyMap.hasOwnProperty(symbol)) {
                        propertyMap[symbol] = 1;
                        propertyValues += ";" + symbol + ":" + symbol;
                    }
                }
                $(this).jqGrid("setColProp", 'PropertyType', {
                    stype: "select",
                    searchoptions: {
                        value: propertyValues
                    }
                }).jqGrid('destroyFilterToolbar')
                    .jqGrid('filterToolbar', {
                        stringResult: true,
                        searchOnEnter: false,
                        defaultSearch: "cn"
                    });
            },

คำถามของฉันคือ ฉันจะส่งข้อมูลที่ส่งคืนจาก URL ไปยัง "beforeProcessing: function (data)" ได้อย่างไร -

ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม


person Sanxion    schedule 23.11.2018    source แหล่งที่มา
comment
มันผ่านไปแล้ว ไม่แน่ใจว่าฉันเข้าใจ ไปยังเหตุการณ์นี้จะถูกส่งผ่านข้อมูลจากเซิร์ฟเวอร์ก่อนที่จะถูกแทรกลงในตาราง นอกจากนี้ยังมีความแตกต่างบางประการในเวอร์ชัน jqGrid ที่แตกต่างกันเกี่ยวกับเหตุการณ์นี้ - จริง ๆ แล้ว jqGrid เวอร์ชันใดที่ใช้ - Guriddo jqGrid, free-jqGrid หรือ jqGrid ‹= 4.7   -  person Tony Tomov    schedule 23.11.2018
comment
ฉันใช้เวอร์ชัน 4.5.1 โปรแกรมดีบักเกอร์บอกฉันว่าแถวเป็นโมฆะ ดังนั้นฉันคิดว่าข้อมูลจะไม่ถูกส่งไปยังฟังก์ชันก่อนที่จะถูกแทรกลงในตาราง   -  person Sanxion    schedule 26.11.2018
comment
ประเภทข้อมูลของคุณคืออะไร? หากประเภทข้อมูลอยู่ในเครื่องจะไม่ถูกส่งในเวอร์ชัน 4.5 สำหรับเวอร์ชันนี้ ข้อมูลจะถูกส่งต่อเมื่อประเภทข้อมูลเป็น json หรือ xml เท่านั้น ไม่มีปัญหาในเวอร์ชัน Guriddo jqGrid   -  person Tony Tomov    schedule 26.11.2018
comment
ประเภทข้อมูลของฉันคือ Json   -  person Sanxion    schedule 26.11.2018
comment
ลอง console.log ข้อมูล อาจเป็นไปได้ว่าไม่มีคุณสมบัติ data.rows ตาม jsonReader ก่อนแถว = data.rows สร้าง console.log ของข้อมูลเท่านั้น   -  person Tony Tomov    schedule 26.11.2018
comment
ขอบคุณสำหรับการตอบกลับของคุณ ฉันกำลังก้าวหน้า ฉันได้จัดการเพื่อแก้ไขข้อบกพร่องของฟังก์ชันใน Visual Studio และเห็นว่าข้อมูลนั้นถูกเติมเข้าไปจริงๆ อย่างไรก็ตาม .rows ไม่พร้อมใช้งานสำหรับชุดข้อมูลของฉัน – คุณรู้ไหมว่าฉันสามารถเรียกใช้วิธีใดเพื่อกำหนดจำนวนแถวเพื่อใช้คุณสมบัติใน for loop?   -  person Sanxion    schedule 26.11.2018
comment
คุณสามารถแก้ไขข้อมูลในเบราว์เซอร์ได้ - โปรดค้นหาวิธีการแก้ไขข้อบกพร่องในเบราว์เซอร์ คุณช่วยกรุณาโพสต์คำตอบง่ายๆ จากเซิร์ฟเวอร์ที่นี่ได้ไหม   -  person Tony Tomov    schedule 26.11.2018
comment
นี่คือบรรทัดแรกจาก Json ที่ส่งคืน: [{PropertyID:1,PropertyRef:1,ShortAddress:99 ROCK LANE,BODMIN,PL91 1NR,SchemeCode:700000,SchemeName:LODMIN,PropertyType:HOU,TenureType:ASSURED,Status:OCCUPIED ,ต้นทุนการจัดการ:MGMT_15_PCENT_SW,ค่าเช่าเดือน:APRIL,SCChargeเดือน:APRIL}   -  person Sanxion    schedule 26.11.2018


คำตอบ (1)


ในกรณีที่ข้อมูลของคุณไม่มีคุณสมบัติแถว คุณสามารถแก้ไขโค้ดเริ่มต้นของคุณได้ดังนี้:

 beforeProcessing: function (data) {
                var propertyMap = {}, propertyValues = ":All", rows = data, i, symbol;
                for (i = 0; i < rows.length; i++) {
                    symbol = rows[i].Symbol;
                    if (!propertyMap.hasOwnProperty(symbol)) {
                        propertyMap[symbol] = 1;
                        propertyValues += ";" + symbol + ":" + symbol;
                    }
                }
....

สิ่งเดียวที่แตกต่างจากรหัสเดิมของคุณคือการแทนที่

แถว = data.rows

กับ

แถว = ข้อมูล

person Tony Tomov    schedule 26.11.2018
comment
ขอบคุณ. การเปลี่ยนแปลงเพียงครั้งเดียวนั้นได้สร้างความแตกต่างทั้งหมด ฉันยังใหม่กับ Jqgrid คุณจะแนะนำให้ใช้เวอร์ชันใด - person Sanxion; 26.11.2018
comment
มันขึ้นอยู่กับสิ่งที่คุณคาดหวัง คุณสามารถใช้เวอร์ชันเชิงพาณิชย์ของเรา Guriddo jqGrid พร้อมการรับประกันการสนับสนุนและการพัฒนา หรือคุณสามารถใช้ fork โอเพ่นซอร์ส free-jqGrid ซึ่งได้รับการสนับสนุนจาก Oleg เท่านั้นโดยไม่มีการพัฒนาในอนาคต - person Tony Tomov; 26.11.2018