【问题标题】:Angularjs Kendo Master-detail grid Apply Default ID from Master to Add New Detail RecordAngularjs Kendo Master-detail grid Apply Default ID from Master to Add New Detail Record
【发布时间】:2017-06-17 02:41:39
【问题描述】:

我正在尝试从主网格扩展行的 ID 字段中获取值,以便在详细信息网格中添加新记录时填充详细信息网格上的相应字段。我尝试了以下方法:

$scope.detailGridOptions = function (dataItem) {
  return {
      dataSource: {
          type: 'aspnetmvc-ajax',
          transport: {
              read: "/Home/GetTaggedContractorsByMajor"
              ,
              create: "/Home/AddContractorToTag"
          },
          serverPaging: true,
          serverSorting: true,
          serverFiltering: true,
          schema: {
              data: "Data",
              total: "Total",
              model: {
                id: "ContractorID",
                fields: {
                    CompanyID: { editable: true, nullable: true, type: "string" },
                    TagID: { editable: true, nullable: true, type: "number" },
                    vchCompanyName: { editable: false, nullable: false, type: "string"},
                    Date: { editable: false, nullable: false, type: "date" },
                    AddedBy: { editable: false, nullable: false, type: "string" }
          }
      }
          },
          pageSize: 5,
          filter: { field: "TagID", operator: "eq", value: dataItem.TagID }
      },
      scrollable: false,
      sortable: true,
      pageable: true,
      editable: "popup",
      edit: function (e) {
              var uid = $(this.element[0]).closest('.k-detail-row').prev().attr('data-uid');
          var selector = kendo.format("tr[data-uid='{0}']", uid);
          var currentGridElement = $(selector).closest("[data-role=grid]");
          var parentRow = currentGridElement.closest(".k-detail-row").prev();
          var parentGrid = parentRow.closest("[data-role=grid]").data("kendoGrid");
          var parentModel = parentGrid.dataItem(parentRow);
          return {
              TagID: parentModel.TagID
          };
      },
      toolbar: ["create"],
      columns: [
      {
          field: "TagID"
        , hidden: true
      }
      ,
          {
              field: "CompanyID",
              title: "CompanyID"
              , editor: companyDropDownEditor
          }
      ,
        {
            field: "vchCompanyName",
            title: "Company Name"
        }
        ,
          {
              field: "Date",
              title: "Date Added"
          }
          ,
          {
              field: "AddedBy",
              title: "Added By"
          }
      ]

  };

};

“parentGrid”变量始终为空。但是,如果直接使用网格的名称为$scope.tagsGrid,我可以获得网格,但var parentModel = $scope.tagsGrid.dataItem(parentRow); 行给出错误“无法获取未定义或空引用的属性'TagID'”。我认为即使我能够使那部分代码正常工作,我仍然缺少一些尝试手动设置 ID 的东西

          return {
              TagID: 1
          };

也不设置ID。如果无法自动为新的明细行设置 ID 字段,是否可以从 Master 获取 ID 值并将其作为参数与我的 create Url 一起发送?

非常感谢任何帮助!

【问题讨论】:

  • 你检查过parentRow是否真的不是null吗?
  • 嗨,是的,谢谢。 parentRow 不为空,但我认为它没有正确的信息。因为我相信最初的 uid 是不正确的。能够完成我试图做的事情。感谢您的帮助。
  • 对不起,我已经帮不上忙了!我以前使用过剑道,但目前无法使用它
  • 没有。非常感谢。感谢您花时间提供帮助。

标签: javascript angularjs asp.net-mvc kendo-grid


【解决方案1】:

我能够通过对编辑事件功能进行一些调整来使其工作:

edit: function (e) {
          var grid = $scope.tagsGrid;
          var uid = e.model.uid;
          var selector = kendo.format("tr[data-uid='{0}']", uid);
          var currentGridElement = $(selector).closest("[data-role=grid]");
          var parentRow = currentGridElement.closest(".k-detail-row").prev();
          var parentModel = grid.dataItem(parentRow);
          e.model.TagID = parentModel.TagID;
      },

【讨论】:

    猜你喜欢
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    相关资源
    最近更新 更多