#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 /