RadTreeView не может обновить, чтобы показать изменения в иерархическом источнике данных
У меня довольно серьезная проблема, пытаясь заставить Telerik radTreeView отображать изменения в базовой базе данных и, следовательно, в источнике данных. Мой сценарий таков.
В обработчике события Load инициализируется radTreeView, как показано в следующем примере кода:
radCommentTreeView1.DataSource = Nothing // Initialize custom data object from custom hierarchical data source class cdsPubCommentDataSource = New CommentDataSource(1) radCommentTreeView1.DataSource = cdsPubCommentDataSource // Configure radTreeView from datasource fields radCommentTreeView1.DataFieldID = "ID" radCommentTreeView1.DataFieldParentID = "ParentID" radCommentTreeView1.DataTextField = "Content" // Bind radTreeView to datasource radCommentTreeView1.DataBind()
Страница загружается с RadTreeView отображается правильно
Пользователь пытается добавить или удалить узел, нажав кнопку с обработчиком на стороне сервера....
... так что цикл обратной передачи начинается в коде на стороне сервера, при этом снова запускается обработчик загрузки из (2) для перепривязки radTreeView
... только после этого запускается обработчик кнопки на стороне сервера, который успешно выполняет команду SQL через другой бизнес-объект BLL (т. е. база данных SQL успешно изменена) ....
Однако, когда страница отображается после обратной передачи, radTreeView по-прежнему отражает исходную иерархию узлов из (4) выше, до того как узел был удален в (5).
Может ли кто-нибудь указать, как этот процесс должен быть достигнут в цикле одиночной обратной передачи - если я вызову DataBind для radTreeView в конце обработчика кнопки на стороне сервера, это, похоже, подхватывает изменения базы данных, но, к сожалению, разрушает форматирование radTreeView с использованием шаблона узла, и, как следствие, ни одно из узлов не отображает содержимое, связанное с данными узла узла. Очевидно, что шаблон узла должен быть создан в начале жизненного цикла страницы, и если, как в этом случае, привязка данных в конце цикла нарушает шаблон, я не могу сказать странице "вернуться назад" и создать экземпляр шаблона снова. Но мне кажется, что вызов DataBind в конце обработчика является интуитивно правильным способом решения этой проблемы, просто потеря шаблона узла препятствует его работе.
Мне известна идея использования интерфейса INotifyPropertyChanged для объекта источника данных, и уже есть событие, которое успешно запускается из объекта DataSource, а именно событие PropertyChanged, которое вызывается в (4), когда radTreeView впервые выполняет повторное связывание с постбэк, но я не уверен, как обработчик события PropertyChanged может помочь в описываемом мной сценарии - обработчик события PropertyChanged на странице по-прежнему вызывается до обработчика кнопки, поэтому на этом этапе база данных не изменялась. Является ли событие PropertyChanged правильным способом продвижения вперед или есть другой подход, более подходящий для обновления radTreeView в течение одного цикла обратной передачи?
Спасибо, если кто-то может указать мне правильное направление с этой проблемой.
С уважением