Asp.net просмотр в виде дерева — событие не запускается при нажатии на тот же узел

#asp.net #treeview #event-handling #selectedvalue

#asp.net #просмотр дерева #обработка событий #выбранное значение

Вопрос:

Есть ли какой-либо способ вызвать событие SelectedNodeChanged при повторном выборе узла. Я не могу использовать код «просмотр дерева.Выбранный узел.Выбрано = false» поскольку я должен показать выбранный узел дерева, но в то же время мне нужно какое-то событие, чтобы я мог зафиксировать щелчок по узлу. Есть ли какой-либо способ сделать это?

Заранее спасибо

Ответ №1:

Что вы могли бы сделать, это поместить код в другое событие, такое как предварительный просмотр, и вы можете определить, изменился ли выбор, используя логическую переменную класса, например blnIsChanged. Это значение, имеющее значение по умолчанию false, устанавливается в true только в событии SelectedNodeChanged, поэтому у вас может быть оператор if в предварительном просмотре (или любое событие, которое будет запущено после события SelectedNodeChanged), которое может выполнить ваш код, если blnIsChanged = false, и ничего не делать, если оно = true.

Пример:

 Partial Class YourPageWithaAtreeView  
    Inherits System.Web.UI.Page  
Dim _blnSelectionChanged as Boolean = false



Protected Sub MyTree_SelectedNodeChanged(byval sender as object, byval e as eventargs) handles MyTree.SelectedNodeChanged  
   _blnSelectionChanged = true //The selection changed
End Sub
Protected Sub MyTree_PreRender(byval sender as object, byval e as eventargs) handles MyTree.PreRender
    if _blnSelectionChanged = false Then
      //Because the boolean is not true that means that 
      //the selected node didn't change
      //insert the code you want to execute when the user
      //clicks the already selected node
    end if
End Sub
  

Комментарии:

1. Проблема не в этом. Это когда я дважды выбираю один и тот же узел. В первый раз событие запускается, но во второй раз оно не запускается.

2. Правильно, потому что во второй раз выделение не меняется, поэтому событие selectednodechanged не сработает. Мое предложение — это способ отслеживать, изменился ли выбранный узел самостоятельно, и если это не произошло, в отдельном событии выполняется ваш код. Если вы хотите, чтобы я отредактировал свой ответ с помощью примера кода, я мог бы.

Ответ №2:

Да, действительно раздражает отсутствие события OnNodeClick() для стандартного элемента управления TreeView.

В итоге я использовал версию Telerik (‘RadTreeView’), которая поддерживает это событие.

Другой способ — написать свой собственный обработчик обходным путем, как описано здесь: http://www.programmersheaven.com/mb/csharp/341363/341363/event-handling-treeview /