0

だから私の見解では、私はこれを持っています

<div id="grid"></div>


<script>
    $(document).ready(function () {
        dataSource = new kendo.data.DataSource({
            transport: {
                read: {
                    url: '@Url.Action("GetCityList", "City")',
                    dataType: "json",
                    type: "GET",
                    contentType: "application/json; charset=utf-8"
                },
                create: {
                url: '@Url.Action("create", "City")',
                type: "Post"
            },
                parameterMap: function (data, operation) {
                    if (operation != "read") {
                        var result = {};

                        for (var i = 0; i < data.models.length; i++) {
                            var ciudad = data.models[i];

                            for (var member in ciudad) {
                                result["ciudades[" + i + "]." + member] =                        ciudad[member];
                            }
                        }
                        return result;
                    }
                }


            },
            batch: true,
            pageSize: 30,
            schema: {
                model: {
                    id: "id",
                    fields: {
                        id: { editable: false, nullable: true },
                        descripcion: { validation: { required: true} },
                        DepartamentName: { field: "DepartamentName" },
                    }
                }
            }
        });

        $("#grid").kendoGrid({
            dataSource: dataSource,
            navigatable: true,
            pageable: true,
            height: 400,
            toolbar: ["create", "save", "cancel"],
            columns: [
                "descripcion",
            { field: "DepartamentName", title: "Name Departament", editor: categoryDropDownEditor, width: 150 }, 
                { command: "destroy", title: "&nbsp;", width: 110}],
            editable: true
        });
    });

</script>

<script>

    function categoryDropDownEditor(container, options) {

        $('<input data-text-field="name" data-value-field="name"  data-bind="value:' + options.field + '"/>')
                        .appendTo(container)
                        .kendoDropDownList({
                            autoBind: false,
                            dataSource: {
                                type: "json",
                                transport: {
                                    read: {
                                        url: '@Url.Action("GetDepartament", "city")
                                            }
                                }
                            }
                        });
    }
            </script>

問題はありません

関数をこの部分に変更すると、

 $('<input data-text-field="name" data-value-field="name"  data-bind="value:' + options.field + '"/>')

 $('<input data-text-field="name" data-value-field="id"  data-bind="value:' + options.field + '"/>')

それを使用すると、アクションで問題なく表示されますIDを取得しますが、グリッドでドロップダウンでグリッドの部門を選択すると、IDが表示されます(必要な動作はありません)

これを機能させるにはどうすればよいですか?私はそれがバインド部分にあると思います..

4

1 に答える 1

1

私はしばらく前に同じ問題に直面しました。そして、私の解決策は少しトリッキーです。アイデアは、「id | name」形式を使用することです。フィールドのテンプレートを設定しました:

template: '#= (fldName).substring((fldName).indexOf("|", 0) + 1) #';

そして、エディターを設定しました:

function(container, options) {
        $('<input id="autoComplete" data-bind="value:' + options.field + '"/>')
            .appendTo(container)                                    
            .kendoComboBox({
                dataTextField: "name",
                dataValueField: "id",
                minLength: 1,
                template: '#= (id).substring((id).indexOf("|", 0) + 1) #',
                filter: "contains",
                delay: 0,
                dataSource: new kendo.data.DataSource({
                    type: "json",
                    transport: {
                        read: {
                            url: "services/SearchContent",
                            type: "GET"
                        },
                        parameterMap: function (opt, operation) {
                            var val;
                            if(opt.filter) {
                                val = opt.filter.filters[0].value;
                            } else {                                                        
                                val = options.model[$("#autoComplete").data("bind").substring(6)];
                                val = (val).substring((val).indexOf("|", 0) + 1);
                            }
                            if(val == "") val = "a";
                            return {
                                searchString: val,
                                resultsCount: 10,
                                date: (new Date()).valueOf()
                            };
                        }
                    },
                    schema: {
                        data: "results",
                        type: "json"
                    },
                    serverFiltering: true
                })
            });

私のサービスもユーザー入力によって結果を動的にフィルタリングしますが、私の考えは理解できると思います。もちろん、これを機能させるために、グリッド サービス シェルは、この列に対して単なる「名前」ではなく「id|name」形式を返します。

于 2012-09-11T09:46:54.383 に答える