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 データベースが正常に変更されます) ....
ただし、ポストバック後にページがレンダリングされると、radTreeView は、ノードが (5) で削除される前に、上記 (4) の元のノード階層を反映します。
このプロセスが単一のポストバックのサイクル内でどのように達成されるべきかを誰かが示すことができますか? サーバー側のボタンハンドラーの最後にある radTreeView で DataBind を呼び出すと、データベースの変更を取得するように見えますが、残念ながらそれは破棄されますノード テンプレートを使用した radTreeView の書式設定。その結果、ノード データバインドされたコンテンツはどのノードでもレンダリングされません。明らかに、ノード テンプレートはページ ライフサイクルの開始時にインスタンス化する必要があります。この場合のように、サイクルの後半でデータバインディングがテンプレートを混乱させる場合、ページに「戻って」テンプレートをインスタンス化するように指示することはできません。また。しかし、ハンドラーの最後で DataBind を呼び出すことは、問題にアプローチする直観的に正しい方法のように思えます。ノード テンプレートが失われると、それが機能しなくなるだけです。
私はデータソース オブジェクトに INotifyPropertyChanged インターフェイスを使用するという考えを認識しており、問題のイベントが DataSource オブジェクトから正常に起動されていることを既に知っています。ページの PropertyChanged イベント ハンドラーはボタン ハンドラーの前にまだ呼び出されているため、その段階ではデータベースは変更されていません。PropertyChanged イベントは正しい方法ですか?それとも、単一のポストバック サイクル内で radTreeView を更新するのにより適した別のアプローチがありますか?
誰かがこの問題で正しい方向に私を向けることができればありがとう.
よろしく