私はTreeViewを持っており、それらはすべてデータベースに保存されているフォルダーとファイルを含んでいます。これで、AjaxToolkitのオートコンプリート検索機能を使用して検索機能を作成しました。検索から得た値を持つノードを見つけるのに苦労していることを除いて、すべて問題ありません。今では再帰的な方法である必要がありますが、その方法がわかりません。
だから、問題はです。すでに持っているノード値に基づいて、ツリービューでノードを見つけるにはどうすればよいですか。また、すべての親ノード値を取得する必要があります。だから私はこれからノードを選択することができます。
コードの一部を次に示します(検索が完了した後のポストバックにあります)。
else
{
// postBack handler for AJAX AutoComplete Extender - JavaScript call: AutoCompletedClientItemSelected
if (Request.Form["__EVENTTARGET"] != null &&
Request.Form["__EVENTTARGET"] == "AutoCompleteExtender" &&
Request.Form["__EVENTARGUMENT"] != null)
{
//i have the value for the node, but i need to search for it here,
//and i also need the node-values from all the parents. I need the "path"
string nodeValue = Session["NodeValueFromSearchForm"].ToString();
string nodePath = "";
foreach (TreeNode node in TreeViewFolders.Nodes)
{
if (node.Value == nodeValue)
{
//I'm stuck here
nodePath += "\\s" + node.Value;
}
}
string prompt = String.Format("<script>{0}{1}{2}</script>", "javascript:__doPostBack('TreeViewFolders','s", nodePath, "')");
ScriptManager.RegisterStartupScript(this, GetType(), "message", prompt, false);
}
}
ループではforeach
、「ルート」フォルダー(上部)のみを取得しています。これを再帰的に実行して子ノードに到達し、最後に、一意のnode.valueを持つノードを見つけるにはどうすればよいですか?
GeorgesOatesLarsenの回答に感謝します。ユーザーがツリービューにファイルをアップロードするときに、ノードのバリューパスを保存することだけを考えていませんでした。そのため、アップロードプロセスで「ファイル」テーブルに値パスを保存し、その値を__doPostBack