【问题标题】:Dropdownlist input within a Kendo grid剑道网格内的下拉列表输入
【发布时间】:2014-08-14 21:40:18
【问题描述】:

快速解释我的问题:我有一个可编辑的剑道网格,其中一列是下拉列表,定义如下:

$('<input required data-text-field="fullName" data-value-field="approverGuid" data-bind="value:' + options.field + '"/>')
    .appendTo(container)
    .kendoDropDownList({
        index: 0,
        dataTextField: "fullName",
        dataValueField: "approverGuid",
        autoBind: false,
        dataSource: {
            transport: {
                read: {
                    dataType: 'json',
                    url: '/requisitions/ajax/getreqapprovers?account=' + accountNum
                }
            },
        },
        value: options.field
    });

我的问题是,在初始网格加载时,当我想显示 fullName 字段时,该列只是一个常规文本元素,填充有approverGuid 字段。当我在网格中单击时,下拉列表被创建,我们现在看到与我们之前看到的approverGuid 对应的正确fullName。我可以在我的下拉列表中选择任何名称,更新,它会正确地将approverGuid写入我的数据库,但它也会恢复到我的网格中的approverGuid,因为下拉列表元素已经消失了。

关于如何在不丢失更新我的数据库所需的 Guid 值的情况下最初显示名称的任何建议?

【问题讨论】:

    标签: jquery kendo-ui kendo-grid


    【解决方案1】:

    如果我理解正确,您需要显示“fullName”而不是“approverGuid”

    如果是这样,我希望您的 dataSource 中有一个模型定义。如果没有,请查看Kendo API MODEL

    例如:

    var dataSource = new kendo.data.DataSource({
      schema: {
        model: {
           id: "ID",
           fields: {
             ID: { editable: false, nullable: true },
             approverGuid: { type: "number", validation: { required: true } },
             fullName: { type: "string", validation: { required: true } }
        }
      }
    

    一旦你有了一个模型,你就可以访问一个数据项,使用它你可以为网格列定义一个模板

    例如:

    columns: [
            {
              field: "approverGuid",
              title: "approverGuid",
              template: function (dataItem) {
                  var html = '<span class="">' + kendo.htmlEncode(dataItem.fullName) + '</span>';
                        return html;
              },
              editor: function (container, options) {
                $('<input required data-text-field="fullName" data-value-field="approverGuid" data-bind="value:' + options.field + '"/>')
                .appendTo(container)
                 .kendoDropDownList({
                    index: 0,
                 dataTextField: "fullName",
                 dataValueField: "approverGuid",
                 autoBind: false,
                 dataSource: {
                   transport: {
                      read: {
                        dataType: 'json',
                        url: '/requisitions/ajax/getreqapprovers?account=' + accountNum
                    }
                 },
              },
              value: options.field
                });
               }
            }]
    

    所以现在模板将显示全名,一旦您处于编辑模式,您将显示下拉列表。希望这会有所帮助

    【讨论】:

    • 正是,我所需要的,用代码清楚地解释了。认真的道具,谢谢!
    • 更新后发生了有趣的异常,但是;我可以从下拉列表中选择一个新值,单击行上的更新(使用 Kendo Grid 内联编辑),新的approverGuid 被写入数据库,但旧名称值仍保留在网格中。如果我在下拉列表中单击返回,它将显示正确的相应名称。我还可以刷新整个网格,它会显示正确的名称。我不想强制刷新,但是,必须有一种方法可以让新选择的名称在不刷新的情况下显示在网格上。
    • 问题是您的数据源更新 url 期待返回结果,如果您指定期待一个 Json 并且如果您返回一个字符串或什么都不返回,这将发生。 eg: "Update: {dataType: 'json'" ,最好将更新后的项目作为 Json 结果返回。如果不让我知道,我认为这就是问题所在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多