Отключение редактирования строк на основе логического значения, но редактирование отключается во всех строках, хотя этого не должно быть. - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь отключить столбцы строк на основе логического значения true, но не столбца Age. Когда я запускаю это, он должен отключать только 3 столбца строк, но отключать все столбцы, а этого не должно быть.

Ошибка - это мой лог c, но я не уверен, где именно.

$(document).ready(function() {
  LoadBasicGrid();
});

$('#btn').on('click', () => {
  SetGridIntoReadOnly()
});

function LoadBasicGrid() {
  CreateGrid();
}

function CreateGrid() {
  let ds = [{
      "PersonID": 1,
      "First": "Albert",
      "Last": "Crane",
      "Age": 30,
      "City": "Toronto"
    },
    {
      "PersonID": 2,
      "First": "Betty",
      "Last": "Page",
      "Age": 23,
      "City": "Toronto"
    },
    {
      "PersonID": 3,
      "First": "Carol",
      "Last": "Michaels",
      "Age": 20,
      "City": "Brampton"
    },
    {
      "PersonID": 4,
      "First": "Dale",
      "Last": "Burns",
      "Age": 40,
      "City": "Etobicoke"
    },
    {
      "PersonID": 5,
      "First": "Edward",
      "Last": "Jones",
      "Age": 35,
      "City": "Bramalea"
    }
  ];

  $("#BasicGrid").empty();
  $("#BasicGrid").kendoGrid({
    dataSource: {
      data: ds,
      schema: {
        model: {
          id: "PersonID",
          fields: {
            PersonID: {
              type: "number",
              editable: false,
              hidden: true
            },
            First: {
              type: "string",
              editable: true
            },
            Last: {
              type: "string",
              editable: true
            },
            Age: {
              type: "number",
              editable: true
            },
            City: {
              type: "string",
              editable: true
            }
          }
        }
      }
    },

    selectable: "row",
    navigatable: true,
    scrollable: true,
    editable: {
      mode: "incell",
      confirmation: false
    },
    beforeEdit: function(e) {

    },
    edit: function(e) {

    },
    change: function(e) {

    },
    columns: [{
        field: "PersonID",
        title: "PersonID",
        editable: false,
        hidden: true
      },
      {
        field: "First",
        title: "First"
      },
      {
        field: "Last",
        title: "Last"
      },
      {
        field: "Age",
        title: "Age"
      },
      {
        field: "City",
        title: "City"
      }
    ],
    height: 300
  });
}

var EditableColumns = ['First', 'Last', 'Age', 'City'];
var PersonID = {
  "Person": [{
    "Orientation": [{
        "PersonID": 1,
        "Male": true
      },
      {
        "PersonID": 2,
        "Male": false
      },
      {
        "PersonID": 3,
        "Male": false
      },
      {
        "PersonID": 4,
        "Male": true
      },
      {
        "PersonID": 5,
        "Male": true
      }
    ]
  }]
};

function SetGridIntoReadOnly() {
  let grid = $('#BasicGrid').getKendoGrid();
  let person = PersonID.Person[0].Orientation;
  person.forEach((e, i) => {
    for (let i = 0; i < grid.dataSource.view().length; i++) {
      if (grid.dataSource.at(i).PersonID === e.PersonID) {
        if (e.Male === true) {
          //console.log(e.PersonID + ": " + i);
          for (let j = 0; j < EditableColumns.length - 1; j++) {
            if (EditableColumns[j] != "Age") {
              grid.dataSource.at(i).fields[EditableColumns[j]].editable = false;
            }
          }
        }
      }
    }
  });
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2020.2.513/styles/kendo.default-v2.min.css" />
<script src="https://kendo.cdn.telerik.com/2020.2.513/js/kendo.all.min.js"></script>

<div id="BasicGrid"></div>

<button id="btn"> Disable Edit </button>

1 Ответ

0 голосов
/ 30 мая 2020

Итак, я понял, как это сделать без кучи кода, и он все время был прямо перед моим лицом, я добавил это в функцию редактирования

let foundPerson = PersonID.Person[0].Orientation.find(f => f.PersonID === e.model.PersonID).Male;
if (foundPerson === true && e.sender.editable.options.fields.field != "Age") {
    this.closeCell();
}
...