我有一个相当严重的问题,试图让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)中的Load处理程序,重新绑定radTreeView
...仅在运行服务器端按钮处理程序之后,通过另一个BLL业务对象成功运行SQL命令(即,SQL数据库已成功修改)....
< / LI>但是,当页面在回发后呈现时,在(5)中删除节点之前,radTreeView仍会反映上面(4)中的原始节点层次结构。
有人可以指出在单个回发的循环中应该如何实现这个过程 - 如果我在服务器端按钮处理程序结束时在radTreeView上调用DataBind,这似乎确实可以获取数据库更改,但是遗憾的是,它会破坏节点模板的radTreeView格式,因此,任何节点都不会呈现节点数据绑定内容。显然,节点模板需要在页面生命周期的开始实例化,如果在这种情况下,循环后期的数据绑定会破坏模板,我无法告诉页面“返回”并实例化模板再次。但是在处理程序结束时调用DataBind似乎是解决问题的直观正确方法,只是由此导致的节点模板丢失阻止了它的运行。
我知道为数据源对象使用INotifyPropertyChanged接口的想法,并且已经从DataSource对象成功触发了有问题的事件,即在radTreeView第一次触发的PropertyChanged事件(4)在回发上重新绑定,但我不确定PropertyChanged事件处理程序如何在我描述的场景中提供帮助 - 页面中的PropertyChanged事件处理程序仍然在按钮处理程序之前调用,因此数据库在该阶段尚未更改。 PropertyChanged事件是正确的前进方式,还是有另一种方法更适合在单个回发周期内刷新radTreeView?
感谢有人能指出我正确的方向解决这个问题。
此致