Как обнаружить, если объекты добавляются к ListBox (или CheckedListBox) управление

Вы можете вычислить значение текущего идентификатора главной строки в событии изменения:

var nmr = +e.sender.element.closest('tr').prev().find('[role=gridcell]:first').text();

Таким образом, после каждого цикла вы можете открыть следующую главную строку:

grid.expandRow(".k-master-row:eq(" + nmr + ")");
$(".k-master-row:eq(" + nmr + ")").addClass("k-state-selected");

var gridData = [{
  "ID": "1",
  "FName": "Adam",
  "LName": "Zoo"
},
  {
      "ID": "2",
      "FName": "Ben",
      "LName": "York"
  },
  {
      "ID": "3",
      "FName": "Chris",
      "LName": "Xavier"
  },
  {
      "ID": "4",
      "FName": "Dan",
      "LName": "Went"
  },
  {
      "ID": "5",
      "FName": "Eddy",
      "LName": "Victor"
  },
  {
      "ID": "6",
      "FName": "Freddy",
      "LName": "Under"
  },
  {
      "ID": "7",
      "FName": "George",
      "LName": "Trenton"
  },
  {
      "ID": "8",
      "FName": "Harry",
      "LName": "Salvador"
  }
];

var detailData = [{
  "ID": "9",
  "City": "Arlen",
  "Province": "Ontario"
},
  {
      "ID": "10",
      "City": "Bancroft",
      "Province": "Ontario"
  },
  {
      "ID": "11",
      "City": "Calgary",
      "Province": "Alberta"
  },
  {
      "ID": "12",
      "City": "Dartmouth",
      "Province": "Ontario"
  },
  {
      "ID": "13",
      "City": "Embro",
      "Province": "Ontario"
  },
  {
      "ID": "14",
      "City": "Fullerton",
      "Province": "Ontario"
  },
  {
      "ID": "15",
      "City": "Georgetown",
      "Province": "Ontario"
  },
  {
      "ID": "16",
      "City": "Huntsville",
      "Province": "Ontario"
  }
]

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

function LoadGridData() {
  $('#MyGrid').kendoGrid({
      dataSource: {
          data: gridData
      },
      schema: {
          model: {
              id: "ID",
              fields: {
                  ID: {
                      type: "string"
                  },
                  FName: {
                      type: "string"
                  },
                  LName: {
                      type: "string"
                  }
              }
          }
      },
      columns: [{
          field: "ID",
          title: "ID"
      },
          {
              field: "FName",
              title: "First"
          },
          {
              field: "LName",
              title: "Last"
          }
      ],
      height: 550,
      detailInit: detailInitGrid,
      detailExpand: function (e) {
          this.select(e.detailRow.prev());
          this.collapseRow(this.tbody.find('> tr.k-master-row').not(e.masterRow));
      }
  });
}

var masterRow;

function detailInitGrid(e) {
  masterRow = e.masterRow;
  $("<div/>").appendTo(e.detailCell).kendoGrid({
      dataSource: {
          data: detailData
      },
      columns: [{
          field: "ID",
          title: "ID"
      },
          {
              field: "City",
              title: "City"
          },
          {
              field: "Province",
              title: "Province"
          }
      ],
      selectable: true,
      change: function (e) {
          let index = this.select().index();
          let dataItem = this.dataSource.view()[index];

          let grid = $("#MyGrid").data("kendoGrid");

          $(".k-master-row").each(function (idx, ele) {
              grid.collapseRow(this);
              $(this).removeClass("k-state-selected");

          });
          // open next master row...
          var nmr = +e.sender.element.closest('tr').prev().find('[role=gridcell]:first').text();
          grid.expandRow(".k-master-row:eq(" + nmr + ")");
          $(".k-master-row:eq(" + nmr + ")").addClass("k-state-selected");

      }
  });
}
<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/2019.1.115/styles/kendo.common.min.css">
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2019.1.115/styles/kendo.rtl.min.css">
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2019.1.115/styles/kendo.default.min.css">
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2019.1.115/styles/kendo.mobile.all.min.css">

<script src="https://kendo.cdn.telerik.com/2019.1.115/js/kendo.all.min.js"></script>


<div id="MyGrid"></div>

21
задан vsminkov 10 August 2016 в 20:07
поделиться

3 ответа

Я не знаю никакого события, что можно смотреть, чтобы показать, что объект был добавлен к ListBox. Возможно, можно использовать метод Win32, который Вы описали вместо этого (т.е. захватите дескриптор, используйте WndProc, и т.д.).

Поочередно, возможно, можно использовать другой класс, который добавляет объекты вместо этого. Например, вместо того, чтобы назвать Добавить метод на ListBox непосредственно, у Вас мог быть вызов пользовательских действий Добавить метод в новом классе, который тогда добавляет объект к ListBox. Вы могли установить событие в том классе, который позволит Вам наблюдать то, что было добавлено.

мне также нравится идея разделить ListBox на подклассы, как упомянуто другим плакатом....

7
ответ дан 29 November 2019 в 22:09
поделиться

Вот сообщение на другом форуме, который рекомендует создать дочерний класс, который включает то поведение.

http://www.eggheadcafe.com/forumarchives/netframeworkcompactframework/jul2005/post23265940.asp

3
ответ дан 29 November 2019 в 22:09
поделиться

К сожалению, нет никакого простого способа сделать это наследование использования или события. Необходимо быть в состоянии переопределить Добавить метод класса Объектов, но Вы не можете добраться до него! Можно быть в состоянии прервать цикл сообщения для выяснения, когда это происходит, но это вне моего опыта.

Одна вещь, которую я заметил от Вашего вопроса, состоит в том, что Вы упоминаете, что объекты добавляются асинхронно. Не делайте этого. Ваша проблема может быть решена, если Вы синхронизируетесь на потоке формы (если Ваша проблема состоит в том, что управление не обновляет).

0
ответ дан 29 November 2019 в 22:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: