Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 23:02 13.06.24 
Компютри и Интернет
   >> .NET
Всички теми Следваща тема *Кратък преглед

Тема TreeViewнови  
Автор AiSiktiriks ([otkacham])
Публикувано31.10.04 08:42



Имам таблица Element в БД с полета:

ElementPK (Primary key - id)
Name (string)
ParentFK (Foreign key към същата таблица)

Искам да я заредя във TreeView control т.е всеки ред си има Име и Foreign key, който указва кой му е родителя.

Въпроса е че имам над 30000 Nodes който трябва да заредя - т.е трябва ми доста бърз алгоритъм.

Ще съм благодарен за идеи!



Тема Re: TreeViewнови [re: AiSiktiriks]  
АвторГypy (Нерегистриран)
Публикувано31.10.04 12:32



При 30,000 нода както и да ги мислиш най-добрия вариант е да прихванеш expand event-a на нода и да заредиш неговите child nodes в ивент хендлъра. Тоест почваш само с руут нодес, и при всеки клик на "+" зареждаш децата.

Иначе наведнъж най-бързият начин е с ДатаСет и релации вътре в него - става само с едно куери.

private void GenerateTreeView()
{
OleDbConnection dbCon = new OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("Examples/Programming/SqlBinding/tree.mdb"));
dbCon.Open();

OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM Links", dbCon);
DataSet ds = new DataSet();
adapter.Fill(ds);

ds.Relations.Add("NodeRelation", ds.Tables[0].Columns["id"], ds.Tables[0].Columns["parentId"]);

foreach(DataRow dbRow in ds.Tables[0].Rows)
{
if(dbRow.IsNull("parentId"))
{
RadTreeNode node = CreateNode(dbRow["Text"].ToString(), true);
RadTree1.AddNode(node);
RecursivelyPopulate(dbRow, node);
}
}
}

private void RecursivelyPopulate(DataRow dbRow, RadTreeNode node)
{
foreach (DataRow childRow in dbRow.GetChildRows("NodeRelation"))
{
RadTreeNode childNode = CreateNode(childRow["Text"].ToString(), true);
node.AddNode(childNode);
RecursivelyPopulate(childRow, childNode);
}
}

private RadTreeNode CreateNode(string text, bool expanded)
{
RadTreeNode node = new RadTreeNode(text);
node.Expanded = true;

return node;
}

private void Page_Load(object sender, System.EventArgs e)
{
if (!Page.IsPostBack)
{
GenerateTreeView();
}
}



Тема Re: TreeView [re: Гypy]  
Автор AiSiktiriks ([otkacham])
Публикувано31.10.04 18:12



Прав си че наистина BeforeExpand event-a е най логичният начин особено като ме известиха че контролът ще има над 300к nodes ;)
10x за вниманието!




Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.