PDA

View Full Version : انتخاب node نمودار درختی



saeedhushmand
شنبه 04 شهریور 1391, 10:40 صبح
دوستان من می خوام متنی که در textbox هست در نودها نمودار درختی بگرده اگر پیدا کرد نود select کنه
کد زیر این کار می کنه اما فقط level اول نمودار درختی من می خوام در کل نودهای treeview بگرده


var matches = from TreeNode x in frm.TrvHesabOne.Nodes
where x.Text.StartsWith(TxtCodeHesab.Text)
select x;
frm.TrvHesabOne.SelectedNode = matches.First<TreeNode>();

hakim22
شنبه 04 شهریور 1391, 11:59 صبح
چون هر نود میتونه بی نهایت زیر نود داشته باشه انجام جستجو در نودها به همین سادگی ها نیست.
برای اینکار شما باید از الگوریتمهای بازگشتی استفاده کنید.
نمونه کدهاشو میتونید در راهنمای VS مربوط به Treeview ببینید

saeedhushmand
دوشنبه 06 شهریور 1391, 00:33 صبح
دوست من نمودار درختی من نهایت 5 زیر شاخه داره...

Mahmoud.Afrad
دوشنبه 06 شهریور 1391, 08:19 صبح
اگر به هر گره یک کلید اختصاص داده باشید میتونید براساس اون کلید جستجو کنید و لیست نودها رو بدست بیارید.
treeView1.CollapseAll();
treeView1.Nodes.Find("key", true).ToList().ForEach(node =>
{
node.Parent.Expand();
});

saeedhushmand
دوشنبه 06 شهریور 1391, 08:42 صبح
با سپاس از کمک دوستان من تابع زیر پیدا کردم و درستم هست...


private void FindNodeInHierarchy(TreeNodeCollection nodes, string strSearchValue)
{
bool m_bNodeFound = false;
for (int iCount = 0; iCount < nodes.Count; iCount++)
{
if (nodes[iCount].Text.ToUpper().Contains(strSearchValue.ToUpper()) )
{
frm.TrvHesabOne.SelectedNode = nodes[iCount];
frm.TrvHesabOne.Select();
m_bNodeFound = true;
return;
}
else
{
m_bNodeFound = false;
}
nodes[iCount].Expand();
FindNodeInHierarchy(nodes[iCount].Nodes, strSearchValue);
if (m_bNodeFound)
{
return;
}
nodes[iCount].Collapse();
}
}