Как построить ASP.NET TreeView с нуля ...? - PullRequest
1 голос
/ 15 января 2009

Я пытаюсь создать вложенную / многопоточную систему комментариев в ASP.NET. Я не знаю, как это делают ребята из PHP. Это намного сложнее, чем казалось на первый взгляд.

Я стараюсь изо всех сил получать иерархические данные для вывода пользователю, но это не работает.

У меня есть таблица с текстом, itemID и parentID.

Я хочу отобразить информацию в виде дерева, но стандартный элемент управления asp.net просто не работает ...

Может кто-нибудь указать мне правильное направление, как вывести это в виде дерева. Я пробовал вложить репитеры, прямо из html-сборки из codebehind и элемента управления treeview.

Я до сих пор не нашел решения ... Кто-нибудь может мне помочь?

Ответы [ 2 ]

4 голосов
/ 15 января 2009

Быстро, по голове (не могу проверить в 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);         
   }
}
0 голосов
/ 15 января 2009

Насколько я понимаю, если у вас есть таблица базы данных с иерархическими данными, у вас есть два варианта: создать свой собственный пользовательский источник данных или программно связать представление дерева с таблицей базы данных.

У меня нет кода для вас, но вы можете использовать следующие шаги:

  1. объявить древовидное управление на странице asp.net
  2. заполнить DataTable (через SqlDataAdapter) вашими иерархическими данными (SELECT itemID, parentID FROM ...)
  3. использовать этот же DataTable для создания DataView элементов верхнего уровня (parentID будет нулевым)
  4. для каждой строки DataView, рекурсивно добавлять элементы дерева, фильтруя другой DataView, где parentID каждого DataViewRow равен строке, которую вы просматриваете в шаге 4

в значительной степени все это делается с помощью TreeView.Nodes.Add (theNewNode), где theNewNode является экземпляром объекта TreeNode

Я знаю, что все это звучит очень смущающе, но я делал это в прошлом. Я нашел отличную информацию в книге Стивена Уолтера ASP.NET Unleashed, в которой есть целые разделы, посвященные этому.

...