سلام
نوشته شده توسط:
zahmah
وقتی روی نود کلیک میکنم تمام نودهای Parent آن را تا ریشه به من برگرداند
این موارد که بسیار ساده است
private IList<TreeNode> GetAllParents(TreeNode child)
{
var list = new List<TreeNode>() ;
while (child != null )
{
list.Add(child) ;
child = child.Parent ;
}
list.Reverse() ;
return list ;
}
نوشته شده توسط:
zahmah
وقتی روی نود کلیک میکنم فیلد متناظر آن در دیتابیس را برای من پیدا کند
کافی است در زمان Add گره جدید به درخت خصیصه Tag را با سطر جاری دیتابیس پر کنید .
این خصیصه یک object گرفته و همیشه همراه گره نگهداری میکند
دات نت و سی شارپ از این خصیصه استفاده نمیکنند و پردازش و کاری روی آن انجام نمیدهند
مانند یک کیسه(Bag) یا برچسب(Tag) همیشه همراه شیء گره است و شما میتوانید هر چیزی در آن قرار دهید !
همانطورکه عرض کردم، کافی است سطر Entity متناظر با گره را در آن قرار دهید تا همیشه همراه گره باشد و به تمام فیلدهای مربوطه دسترسی داشته باشید
زمان ایجاد و افزودن گره
var child = new TreeNode()
{
Text = dbRow.Text,
Tag = dbRow
};
parent.Nodes.Add(child) ;
زمان نیاز به خواندن اطلاعات
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
var dbRow = (YOUR_ENTITY_ROW_TYPE)e.Node.Tag ;
var firstName = dbRow.FirstName;
var lastName = dbRow.LastName;
var birthDate = dbRow.BirthDate;
...
نوع YOUR_ENTITY_ROW_TYPE در واقع نام کلاس سطر Entity شما است، همان چیزی که در Tag ریخته بودید، نمیدانم بطور مثال OrganizationalUnitEntityRow یا CustomerEntityRow !
نوشته شده توسط:
zahmah
در این جستجو من با عبارت پیدا شده کاری ندارم بلکه از فیلد دیگری که واژه معادل لاتین آن است کار دارم
درست متوجه نشدم ... میخواهد در Tree جستجو کنید؟ یا منظورتان همان بود که با کلیک روی گره ، فیلدهای دیگر را داشته باشید؟
جستجو در درخت میتواند شبیه این باشد و داشتن همه فیلدها را هم که قبل تر توضیح دادم
private void DeepSearch(TreeNode parent, IList<TreeNode> buffer, string search)
{
foreach (TreeNode child in parent.Nodes)
{
this .DeepSearch(child, buffer, search) ;
var dbRow = (YOUR_ENTITY_ROW_TYPE)child.Tag ;
if (string .IsNullOrEmpty(dbRow.YOUR_FIELD_NAME)) continue ;
if (dbRow.YOUR_FIELD_NAME.IndexOf(search, StringComparison.OrdinalIgnoreCase) < 0) continue ;
buffer.Add(child);
}
}
public IList<TreeNode> DeepSearch(string search)
{
var list = new List<TreeNode>();
if (string .IsNullOrEmpty(search)) return list ;
foreach (TreeNode child in this .treeView1.Nodes)
{
this .DeepSearch(child, list, search) ;
}
return list ;
}
...{
var result = this.DeepSearch("text-for-search") ;
}
نوشته شده توسط:
zahmah
بهترین راه برای پیاده سازی Treeview در بانک اطلاعاتی چیست؟
یک جدول تک برای پیاده سازی یک درخت درون دیتابیس کافی است.
همین سامانه یک جدوله بهترین حالت برای یک درخت است و تا بی نهایت عمق را هم میتوانید پشتیبانی کنید
باید یک کلید خارجی به همان جدول داشته باشید که پدر هر فیلد را نگهداری کند.
برای گره های ریشه (فاقد پدر) فیلد مذکور میتواند null باشد که مشخص کننده بی-پدر=بی-والد بودن گره است.
| ID | ParentID | Text | ...other fields ...
-------------------------------------------------
| 1 | null | "root" | ...
| 2 | 1 | "child1" | ...
| 3 | 1 | "child2" | ...
| 4 | 4 | "child3" | ...