|
分類:[ASP.NET (C#)]
こんばんは、いつもお世話になっております。 現在、何度かこちらで質問させて頂いているのですが・・・ ツリーコントロールを使った掲示板を作っております。
見た目・仕組みとしましては、フレーム(左右分かれるタイプ)で作成しており、左がツリー表示の記事一覧、右側がクリックされた記事を表示・編集・新規作成・削除などをするページで構成しております。
そこで左側メニューで選択したものを右に表示させるという動作は、出来ているのですが、 選択したノードがどれなのかを色を付けるか「←」などの記号を付けたいのです。 それにより、ユーザが今どの記事を見ているのかなどを判りやすくしたいが為なのですが・・・。
それで調べた所、aspx側のTreeViewのタグ以下でデザイン定義をする
<SelectNodeStyle BackColor="Pink" 〜〜〜〜・・・ />
で選択されたノードの背景の色を変えるというのは判ったのですが、 C#側の方で、各ノードにはリンクをつけているんですけれど、 リンクをつけると全然SelectNodeStyleが効かなくなってしまいます。
これに関しても調べたのですが、
rootnode[rootcount].NavigateUrl= PagePath.test; //test.aspxへのリンク
のようにNavigateUrlを使うとSelectNodeStyleが無効になるバグ?と海外のサイトで載っていました。
そこで何とか方法はないものか・・・と現在困っております。 何か対策、上記でのバグ回避など方法ありましたらご教授くださいますようお願い致します。 またこれ以外でも、左ツリー部のどれか記事を選択したら、わかりやすくクリックした記事に色や文字が太くなるなど色々方法ありましたら教えてくださると幸いです。
最後に前にも記載してましたが、変更点も含めた現状のソースの一部を載せておきます。 宜しくお願いします。
一部ですがcsソースとしては以下の通りです。
//カテゴリ取得用ノードの初期設定 TreeNode[] rootnode = new TreeNode[categories.Rows.Count + 1]; for (int i = 0; i < categories.Rows.Count + 1; i++) { rootnode[i] = new TreeNode(); } int rootcount = 0;
foreach (DataRow category in categories.Rows) { rootnode[rootcount].Text = (String)category["CategoryName"]; rootnode[rootcount].Target = "bbsdetail"; //Frameの右側表示指定 rootnode[rootcount].NavigateUrl = PagePath.Category; //Category(親)記事をクリックしたら飛ぶ
// サブカテゴリ一覧を取得 DataTable subCategories = ch.GetCategoryList((int)category["CategoryID"]);
//サブカテゴリ取得用ノードの初期設定 TreeNode[] subnode = new TreeNode[subCategories.Rows.Count + 1]; for (int y = 0; y < subCategories.Rows.Count + 1; y++) { subnode[y] = new TreeNode(); } int subcount = 0; foreach (DataRow subCategory in subCategories.Rows) { //subnodeにカテゴリーの名前を格納 subnode[subcount].Text = (String)subCategory["CategoryName"]; subnode[subcount].Target = "bbsdetail"; subnode[subcount].NavigateUrl = PagePath.SubCategory;
// トピック一覧を取得 TopicHelper th = new TopicHelper(); DataTable topics = th.GetTopicListData((int)subCategory["CategoryID"]);
//トピック取得用ノードの初期設定 TreeNode[] topicnode = new TreeNode[topics.Rows.Count + 1]; for (int z = 0; z < topics.Rows.Count + 1; z++) { topicnode[z] = new TreeNode(); } int topiccount = 0;
foreach (DataRow topic in topics.Rows) { //topicnodeにトピックの名前を格納 topicnode[topiccount].Text = (String)topic["Title"]; topicnode[topiccount].Target = "bbsdetail"; topicnode[topiccount].NavigateUrl = PagePath.Topic + topic["TopicID"] + "&rowindex=" + (topiccount+1); //トピック行の何行目にある記事であるかを取得しながら次のページへ遷移
//if:トピックがある場合は、子供のノードを追加。 //else:トピックが無い場合は、子供のノードを追加しない。 if (!topicnode[topiccount].Value.Equals("")) { subnode[subcount].ChildNodes.Add(topicnode[topiccount]); } topiccount++; } //if:サブカテゴリがある場合は、子供のノードを追加。 //else:サブカテゴリが無い場合は、子供のノードを追加しない。 if (!subnode[subcount].Value.Equals("")) { rootnode[rootcount].ChildNodes.Add(subnode[subcount]); } subcount++; } //データをツリーに追加する。 tree.Nodes.Add(rootnode[rootcount]); rootcount++; }
|