PDA

View Full Version : نمایش درختی اطلاعات دیتابیس به شکل پدر و فرزند مانند treeview



shocraneh
دوشنبه 29 فروردین 1390, 20:42 عصر
برای نمایش زیر مجموعه های یک سازمان از درخت استفاده بشه مانند
تری ویو .(اما تری ویو خاصیت دیتا سورس ندارد تا بتونم ابه بانک اتصالش بدم)
البته میخام با کلیک روی نام واحد ،نام سرپرست واحد نیز در روبروی ان نمایش داده بشه

rt3073
سه شنبه 30 فروردین 1390, 18:51 عصر
این کلاس رو من قبلا نوشتم شاید به دردت بخوره. Table باید یه ستون id یه ستون Name و یه ستون ParentId داشته باشه. برای استفاده از این کلاس باید یه TreeView روی فرم داشته باشی و اطلاعاتی هم که می خوای به کاربر در قالب درخت نشون بدی داخل یه DataTable بریزی. بعد هم به صورت زیر کلاس رو صدا بزن:


ShowTreeView(TreeView1,DT);



68935

soaleman
سه شنبه 30 فروردین 1390, 23:02 عصر
دوست عزیز سلام

من کلاس شمارو دانلود کردم

اما تو کلاس یک ParentId هست که نامعلومه؟!
میشه بیشتر توضیح بدید
ممنون

rt3073
چهارشنبه 31 فروردین 1390, 22:22 عصر
منظورم از اون ParentId اسم ستونیه که توی DataTable به عنوان ستون Parent در نظر گرفته شده. توی BindData سطرهایی که ParentId برابر صفر دارند رو پیدا می کنیم و در حلقه For ضمن اضافه کردن اونا به TreeView فرزندانشون به صورت Recursive توسط FindChildNodes پیدا شده و به TreeView اضافه می شوند.


public class ShowTreeView
{
private TreeView TreeView1 = new TreeView();
private DataTable DT;
public ShowTreeView(TreeView TV, DataTable DT)
{
TreeView1 = TV;
TreeView1.Nodes.Clear();
this.DT = DT;
BindData();
}
private void BindData()
{
DataView ParentRows = new DataView(DT);
ParentRows.RowFilter = "ParentId=0";
for (int i = 0; i < ParentRows.Count; i++)
{
TreeNode tn = new TreeNode();
tn.Tag = ParentRows[i]["id"].ToString();
tn.Text = ParentRows[i]["Name"].ToString();
TreeView1.Nodes.Add(tn);
FindChildNodes(ParentRows[i]["id"].ToString(),TreeView1.Nodes[i]);
}
}
private void FindChildNodes(string ParentID, TreeNode TV)
{
DataView ChildRows = new DataView(DT);
ChildRows.RowFilter = "ParentId=" + ParentID;
for (int i = 0; i < ChildRows.Count; i++)
{
TreeNode tn = new TreeNode();
tn.Tag = ChildRows[i]["id"].ToString();
tn.Text = ChildRows[i]["Name"].ToString();
TV.Nodes.Add(tn);
FindChildNodes(ChildRows[i]["id"].ToString(), TV.Nodes[i]);
}
}
}

ad.davachi
پنج شنبه 26 آبان 1390, 15:01 عصر
سلام چرا این خط اررور میده:
TV.Nodes.Add(tn);
'System.Xml.Linq.Extensions.Nodes<T>(System.Collections.Generic.IEnumerable<T>)' is a 'method', which is not valid in the given context

ad.davachi
پنج شنبه 26 آبان 1390, 15:15 عصر
sسلام دوباره خودم متوجه شدم باید اینطوری بنویسیم :
TV.ChildNodes.Add