|
分類:[ASP.NET (C#)]
こんにちは、いつもお世話になっております。 現在、エクスプローラー風ツリービューの掲示板を作成中なのですが、
C#からAsp.net(aspxファイル)に書いているjavascriptの下記場所にC#のデータベースから取得したデータを 表示させたいのですが、どうすれば良いのか分からずにお手上げ状態となってしまいました。
C#内でデータを作っている箇所の一部ソースは、下記の通りです。 最終的にCreateTable()はページロードで現在のソースではデータバインドさせていますが、 javascriptのツリー表示にさせたい場合をお手数ではございますが、どなたかご教授下さい。
<開発環境> VS2005 WindowsXP asp.net C# javascript
<C#ソース> private DataTable CreateTable() { // ログイン者が管理者に許可されているカテゴリを取得 DataTable da = new DataTable(); da.Columns.Add("CategoryID", typeof(int)); DataTable daCategory = CategoryHelper.SelectCategoriesWithManager();
// 候補1 管理者カテゴリIDをint[]配列に挿入 int[] aList = new int[daCategory.Rows.Count]; int num = 0; foreach (DataRow cRrow in daCategory.Rows) { aList[num] = (int)cRrow["CategoryID"]; num++; }
// トピック一覧にバインドさせるためのテーブルを作成 DataTable dt = new DataTable(); dt.Columns.Add("Title", typeof(string)); dt.Columns.Add("CreateTime", typeof(DateTime)); dt.Columns.Add("TopicID", typeof(int)); dt.Columns.Add("IndentCount", typeof(int)); dt.Columns.Add("CreateUser", typeof(string)); dt.Columns.Add("RowType", typeof(int)); dt.Columns.Add("ReplyCount", typeof(int)); dt.Columns.Add("CategoryUser", typeof(Boolean));
// カテゴリ一覧を取得 CategoryHelper ch = new CategoryHelper(); DataTable categories = ch.GetCategoryList(aList); Boolean CreateUser = false;
foreach (DataRow category in categories.Rows) { int categoryId = (int)category["CategoryID"]; CreateUser = false; for (int n = 0; n < aList.Length; n++) { if (aList[n] == categoryId) { CreateUser = true; } if (CreateUser) break; } // カテゴリ表示用の行を作成 DataRow row = dt.NewRow(); row["Title"] = category["CategoryName"]; row["RowType"] = ROWTYPE_CATEGORY; row["TopicID"] = category["CategoryID"]; row["IndentCount"] = 1; row["CategoryUser"] = CreateUser; dt.Rows.Add(row);
// サブカテゴリ一覧を取得 DataTable subCategories = ch.GetCategoryList((int)category["CategoryID"]); foreach (DataRow subCategory in subCategories.Rows) { // サブカテゴリ表示用の行を作成 DataRow row1 = dt.NewRow(); row1["Title"] = subCategory["CategoryName"]; row1["RowType"] = ROWTYPE_SUBCATEGORY; row1["TopicID"] = subCategory["CategoryID"]; row1["IndentCount"] = 2; row1["CategoryUser"] = CreateUser; dt.Rows.Add(row1);
// ヘッダを作成 DataRow headerrow = dt.NewRow(); headerrow["RowType"] = ROWTYPE_HEADER; headerrow["IndentCount"] = 0; headerrow["CategoryUser"] = CreateUser; dt.Rows.Add(headerrow);
// トピック一覧を取得 TopicHelper th = new TopicHelper(); DataTable topics = th.GetTopicListData((int)subCategory["CategoryID"]); foreach (DataRow topic in topics.Rows) { DataRow row2 = dt.NewRow();
row2["Title"] = topic["Title"]; row2["TopicID"] = topic["TopicID"]; row2["RowType"] = ROWTYPE_TOPIC; row2["CreateTime"] = topic["CreateTime"]; row2["IndentCount"] = topic["IndentCount"]; row2["ReplyCount"] = topic["ReplyCount"]; row2["CategoryUser"] = CreateUser; dt.Rows.Add(row2); } } } return dt; }
<aspxファイル内のjavascript> <script type="text/javascript" src="../script/tree.js"></script> <script type="text/javascript"> <!-- var Tree = new Array; // nodeId | parentNodeId | nodeName | nodeUrl Tree[0] = '1|0|<%="AAA" %>|#'; //AAAの場所にデータベースのデータを格納し、表示したい Tree[1] = "2|1|Page 1.1|#"; Tree[2] = "3|1|Page 1.2|#"; Tree[3] = "4|3|Page 1.2.1|#"; Tree[4] = "5|1|Page 1.3|#"; Tree[5] = "6|2|Page 1.1.1|#"; Tree[6] = "7|6|Page 1.1.1.1|#"; Tree[7] = "8|6|Page 1.1.1.2|#"; Tree[8] = "9|1|Page 1.4|#"; Tree[9] = "10|9|Page 1.4.1|#"; Tree[10] = "11|0|Page 2|#"; //--> </script>
ツリー表示させたい場所に <script type="text/javascript"> <!-- createTree(Tree,1,7); // starts the tree at the top and open it at node nr. 7 //--> </script> のソース配置。
現状、http://youmos.com/news/dtree.htmlのサイト様のダウンロードソースを使っていますが、 掲示板なのでノードは増えていく形で作成予定です。(ループ分で配列を足していく?)
後、ノードは今現状では階層が分かれていますが、最終的には例のようにしたいと考えています。
例> びびえす Re:びびえす
|