Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическое дерево treeview, Динамическое дерево treeview 
V
    Опции темы
oakenfold
Дата 16.6.2009, 07:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 15.12.2008

Репутация: нет
Всего: нет



Поднимаю наверно самый часто задаваемый вопрос, по заполнению дерева из БД. Много просидел в инете у каждого что то свое и то в каком то оборванном состоянии. Очень прошу поделиться рабочим кодом по добавлению, удалению, переименованию и перемещению нодов и чилдренов через интерфейс при условии что структура дерева на уровне таблиц такая:

id - int
parentid - int
label - varchar

+ ключь замыкающийся внутри одной таблицы id и parentid

Заранее подбагодарю участников.
 smile 
PM MAIL   Вверх
ДобренькийПапаша
Дата 17.6.2009, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



эм...ну мне в скором времени тоже это реализовывать... а в чём проблема то?

Определённых событий там куча...beforeExpand, afterExpand... обрабатывай... в чём проблемы то? И зачем ты хочешь рабочий код найти? Такой какой тебе надо вряд ли найдёшь если ты из БД заполняешь...наверянка свои фишки у тебя будут...
Наверно проще самому писать...

кстати поделись тем, что нашёл...


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
oakenfold
Дата 22.6.2009, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 15.12.2008

Репутация: нет
Всего: нет



Цитата(ДобренькийПапаша @ 17.6.2009,  20:14)
эм...ну мне в скором времени тоже это реализовывать... а в чём проблема то?

Определённых событий там куча...beforeExpand, afterExpand... обрабатывай... в чём проблемы то? И зачем ты хочешь рабочий код найти? Такой какой тебе надо вряд ли найдёшь если ты из БД заполняешь...наверянка свои фишки у тебя будут...
Наверно проще самому писать...

кстати поделись тем, что нашёл...

Вообщем порыскал по форуму, нашел источник Организация дерева (неограниченное) Практически ничего не переделывал, в итоге могу поделиться творением.

делаем таблицу вида
Код

USE [ManegmentAccess]
GO
/****** Объект:  Table [dbo].[TableName1]    Дата сценария: 06/22/2009 16:53:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[TableName1](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ParentID] [int] NULL,
    [DisplayOrder] [int] NULL,
    [NodeType] [varchar](4) NULL,
    [NodeText] [varchar](50) NULL,
 CONSTRAINT [PK_TableName1] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF


На форму кидаем элемент TreeView и вставляем следующий код:
Код

        private void LoadTreeview()
        {
            using (SqlConnection conn = new SqlConnection(@"Data Source=PC\SQLEXPRESS05;Initial Catalog=ManegmentAccess;User Id=sa;Password=sa;"))
            {
                using (SqlDataAdapter da = new SqlDataAdapter("select ID, ParentID, DisplayOrder, NodeType, NodeText from TableName1", conn))
                {
                    using (DataSet ds = new DataSet())
                    {
                        treeView1.Nodes.Clear();

                        da.Fill(ds, "TableName");
                        table = ds.Tables["TableName"];

                        AddKids(null, "ParentID is null", "DisplayOrder", table);
                    }
                }
            }
        }

        private void AddKids(string parentid, string filter, string sort, DataTable table)
        {

            DataRow[] foundRows = table.Select(filter, sort);

            if (foundRows.Length == 0)

                return;

            // Get TreeNode of parent using Find which looks in the name
            // property of each node. true itterates all children

            TreeNode[] parentNode = treeView1.Nodes.Find(parentid, true);

            if (parentid != null)

                if (parentNode.Length == 0)

                    return;

            // Add each row to tree

            for (int i = 0; i <= foundRows.GetUpperBound(0); i++)
            {

                string nodetype = foundRows[i]["NodeType"].ToString();

                string nodetext = foundRows[i]["NodeText"].ToString();

                string nodeid = foundRows[i]["ID"].ToString();

                TreeNode node = new TreeNode();

                node.Text = nodetext;

                node.Name = nodeid; // This is critical as the Find method searches the Name property

                if (parentid == null)

                    treeView1.Nodes.Add(node); // Top Level

                else

                    parentNode[0].Nodes.Add(node); // Add children under parent

                // Itterate into any nodes

                if (nodetype.ToLower() == "node")

                    AddKids(nodeid, "ParentID=" + nodeid, sort, table);
            }
        }


Потом на метод прогрузки формы указываем нами вставленный метод 
Код

        private void Form1_Load(object sender, EventArgs e)
        {
            LoadTreeview();

            treeView1.ExpandAll();
        }

PM MAIL   Вверх
Idsa
Дата 28.6.2009, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



По поводу деревьев сегодня на Хабре проскакивала замечательная презентация: http://www.slideshare.net/quipo/trees-in-t...pe=presentation


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0473 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.