0
votes

I have a kendo grid with a column that has a custom filter template which is a dropdownlist. I am having trouble populating the data into the dropdownlist.

What I want is to have the options be all of the unique values of all the records in that column.

Side question: is there any easier way to populate the dropdownlist with the unique values of the columns? As this is the most logical contents to place in the dropdown, I would hope there may be some built in way?

What I'm trying to do is have it call a service that returns JSON specifying the options.

Below I have the 3 ways I've tried to code the data-column field based on google searches that led to very old topics on this forum, which is why I hope there is a simple way. The first 2 don't work but the third (hard coding it) does work.

1) This call hits the server and returns JSON but does not populate the dropdown.

 {
            "field": "location_name",
            "title": "Location",
            "filterable": {
                cell: {
                    template: function (args) {
                        args.element.kendoDropDownList({
                        dataTextField: "optionText",
                        dataValueField: "optionValue",
                        valuePrimitive: true,
                        dataSource: {
                            transport: {
                                read: 
                                    function(options) {
                                        $.ajax({
                                            type: "GET",
                                            url:  "/Patrol/Report.aspx/GetOptions",
                                            data: "d",
                                            contentType: "application/json; charset=utf-8",
                                            dataType: "json",
                                            success: function (msg) {
                                                alert(msg.d);
                                                return msg; //tried with and without the return
                                            }
                                        });
                                    }
                            }
                        }
                    });
                },
                showOperators: false
            }
        }

2) This call doesn't hit the server at all

        {
            "field": "location_name",
            "title": "Location",
            "filterable": {
                cell: {
                    template: function (args) {
                        args.element.kendoDropDownList({
                        dataTextField: "optionText",
                        dataValueField: "optionValue",
                        valuePrimitive: true,
                        dataSource: {
                            transport: {
                                read: {
                                    dataType: "jsonp",
                                    url: "/Patrol/Report.aspx/GetOptions",
                                }
                            }
                        }
                    });
                },
                showOperators: false
            }
        }

3) Hard coding the datasource data: This works correctly

    {
        "field": "location_name",
        "title": "Location",
        "filterable": {
            cell: {
                template: function (args) {
                    args.element.kendoDropDownList({
                    dataTextField: "optionText",
                    dataValueField: "optionValue",
                    valuePrimitive: true,
                    dataSource: 
                        [{"optionText": "HP","optionValue": "HP"}, {"optionText": "Loc2","optionValue": "ID2"}]
                });
            },
            showOperators: false
        }
    }
1
Scenario 1 does not work, because you need to call options.success(...your data...) in the success callback of $.ajax(): docs.telerik.com/kendo-ui/framework/datasource/crud#read-local - dimodi
@dimodi Ok great I will try that, I was not sure how to pass the data back to the dropdown - James Wierzba
@dimodi This is a solution to my problem. If you post it as an answer I will accept it - James Wierzba

1 Answers

1
votes

Scenario 1 does not work, because you need to call options.success(...your data...) in the success callback of $.ajax():

http://docs.telerik.com/kendo-ui/framework/datasource/crud#read-loc‌​al