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"]);
}
}
}
Быстрое создание дерева
В БД есть таблица состоящая из трех столбцов: ID, Name, ID_Parent. По данным из этой таблицы нужно построить дерево.
Загоняю эту таблицу в dataSet и потом строю дерево так:
Код:
Всё работает, но ДОЛГО. На старых машинах процесс создания дерева занимает минут 5, что очень не нравиться пользователям.
Подскажите, пожалуйста, как оптимизировать мой метод или как ещё можно создать дерево по данным из таблицы.
Главное чтобы работало всё быстро и правильно.
Еще не думал как реализовать это программно, но зачем тебе грузить все дерево сразу? загрузи на 2 уровня ниже и хватит... Как пользователь открывает одну из ветвей - подгрузи еще на 1 уровень в каждом уровне. Тебе всего лишь придется отлеживать открытие узла дерева и (желательно в отдельном потоке) грузить еще по одному уровню на каждый уровень. И еще можешь при простое программы в отдельном потоке с циклом и thread.sleep потихоньку и незаметно грузить дерево.