1. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

Быстрое создание дерева

Тема в разделе ".NET - программирование", создана пользователем Balda, 12 фев 2009.

  1. Balda

    Balda Гость

    Репутация:
    0
    Пишу в MS VS .NET 2008 на C#.
    В БД есть таблица состоящая из трех столбцов: ID, Name, ID_Parent. По данным из этой таблицы нужно построить дерево.
    Загоняю эту таблицу в dataSet и потом строю дерево так:
    Код:
    private void Form14_Load(object sender, System.EventArgs e)
    {
    FillTreeRecurs(this.treeView1.Nodes,0);
    
    }
    
    private void FillTreeRecurs(TreeNodeCollection tnc, int parent)
    {
    System.Data.DataView dv = new DataView(dataSet1.Tables[0]);
    dv.RowFilter = "ID_Parent = "+parent.ToString();
    foreach( System.Data.DataRowView drw in dv )
    {
    if ((int) drw["ID"] != parent)
    {
    TreeNode tn = new TreeNode(drw["Name"].ToString());
    tnc.Add(tn);
    FillTreeRecurs(tn.Nodes, (int) drw["ID"]);
    }
    }
    }
    Всё работает, но ДОЛГО. На старых машинах процесс создания дерева занимает минут 5, что очень не нравиться пользователям.
    Подскажите, пожалуйста, как оптимизировать мой метод или как ещё можно создать дерево по данным из таблицы.
    Главное чтобы работало всё быстро и правильно.
     
  2. etc

    etc Гость

    Репутация:
    0
    работа с гуи самая тяжелая, надо ее отключать.
     
  3. Electro

    Electro Гость

    Репутация:
    0
    DevExpress.XtraTreeList
     
  4. Barmutik

    Barmutik Гость

    Репутация:
    0
    Строить по мере работы пользователя с деревом ... т.е. на первом утапе строить только первый и допустим второй уровень .. ну и дальше по мере обращения пользователя к элементам дерева...

    Прикиньте что бы было если бы файловые менеджеры строили всё структуру папок при запуске...
     
  5. Nogr1k

    Nogr1k Гость

    Репутация:
    0
    Возможно немного поможет отключение обновления контрола. В Вашем случае: this.treeView1.BeginUpdate() и после заполнения this.treeView1.EndUpdate().
    Также добавит производительности использование for вместо foreach (пруфлинк). Хотя, возможно, это не самые узкие места в коде.
     
Загрузка...

Поделиться этой страницей