Как построить ASP.NET TreeView с нуля...?

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

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

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

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

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

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

2 ответа

Решение

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

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

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

  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, в которой есть целые разделы, посвященные этому.

Другие вопросы по тегам