1

ASP.NET でネストされた/スレッド化されたコメント システムを構築しようとしています。PHPの人たちがどのようにそれを行うのかわかりません。最初の想像よりもはるかに難しいです。

私は階層データを取得してユーザーに出力しようとしていますが、うまくいきません。

テキスト、itemID、およびparentIDを含むテーブルがあります。

ツリービュー形式で情報を表示したいのですが、asp.netの標準コントロールではうまくいきません...

これをツリービューに出力する方法の正しい方向に誰かが私を向けることができますか? コードビハインドとツリービューコントロールから直接HTMLを構築して、リピーターをネストしようとしました。

まだ解決策が見つかりません...誰か助けてくれませんか?

4

2 に答える 2

4

すぐに、頭で(VS2k8をチェックインできませんでした)、Linq to SQLを使用してこのようにします

private void BuildTree()
{
   List<Item> items = from item in dataContext.Items
                      select item;

   List<Item> rootItems = items.FindAll(p => p.ParentID == null );

   foreach ( Item item in rootItems )
   {
      TreeViewNode tvi = new TreeViewNode(item.text);
      BuildChildNodes(tvi, items, item.ID);
      YourTreeNodeName.Nodes.Add(tvi);
   }   
}

private void BuildChildNodes(TreeViewNode parentNode, List<Item> items, long parentID)
{
   List<Item> children = items.FindAll ( p => p.ParentID = parentID );
   foreach( Item item in children)
   {
      TreeViewNode tvi = new TreeViewNode(item.text);
      parentNode.Nodes.Add(tvi);
      BuildChildNodes(tvi, items, item.ID);         
   }
}
于 2009-01-15T18:06:28.847 に答える
0

私が理解しているように、階層データを含むデータベース テーブルがある場合、2 つのオプションがあります。独自のカスタム データ ソースを作成するか、プログラムでツリービューをデータベース テーブルにバインドします。

コードはありませんが、次の手順に従って使用できます。

  1. asp.net ページ内でツリービュー コントロールを宣言する
  2. DataTable に (SqlDataAdapter を介して) 階層データを入力します (SELECT itemID、parentID FROM...)
  3. 同じ DataTable を使用して、最上位アイテムの DataView を作成します (parentID は null になります)
  4. DataView の行ごとに、各 DataViewRow の parentID が手順 4 でループしている行と等しい別の DataView をフィルター処理して、ツリービュー項目を再帰的に追加します。

これのほとんどすべては、TreeView.Nodes.Add(theNewNode) を使用して行われます。ここで、theNewNode は TreeNode オブジェクトのインスタンスです。

これはすべて非常に混乱するように聞こえることを知っていますが、私は過去にそれをやったことがあります. Stephen Walther ASP.NET Unleashed book で素晴らしい情報を見つけました。これには、これを達成するためのセクション全体があります。

于 2009-01-15T17:39:33.673 に答える