PDA

View Full Version : tree view



golagha_program
پنج شنبه 18 بهمن 1386, 23:32 عصر
جستجو کردم از کد ها هم استفاده کردم به نتیجه نرسیدم.
یه جدول دارم با ساختار:code-parentcode-codename
می خوام اینو تویه tree view نمایش بدم بهش نود اضافه کنم ویرایش کنم حذف کنم.
با تشکر از یاریتان

mohammad272005
جمعه 19 بهمن 1386, 02:04 صبح
نمایش:
1- این کد رو در Form1_Load قرار بده:


listView1.Clear();
listView1.Columns.Add("code");
listView1.Columns.Add("parentcode");
listView1.Columns.Add("codename");
listView1.View = View.Details;

و این کد رو هرجا که میخوای اطلاعات لود بشن قرار بده:


foreach (DataRow row in dataSet1.Tables["test"].Rows)
{
ListViewItem item = newListViewItem(row["code"].ToString());
item.SubItems.Add(row["parentcode"].ToString());
item.SubItems.Add(row["codename"].ToString());
listView1.Items.Add(item);
}
اضافه: متاسفانه مانند DataGridView نیست که بشه کاربر مستقیما این کار رو انجام بده

golagha_program
جمعه 19 بهمن 1386, 12:28 عصر
سلام.
من tree view گفتم این که شما کدشو نوشتین list view .
بیشتر توضیح بدین.
خیلی به این کد احتیاج دارم.
با تشکر

Masoud_TB
جمعه 19 بهمن 1386, 13:32 عصر
خوب شما می تونین این کار رو به صورت OnDemand انجام بدین که به نظر من بهترین روش است. OnDemand به این معنی که هر وقت در خواست برای باز شدن یک Nodeدر درختان آمد اطلاعات آن رو باز کنین و نمایش بدین.
برای اینکار شما ابتدا باید سطح اول درخت را که در حقیقت ParentCodeشان خالی است را پر کنین و سپس وقتی درخواست باز شدن هر کدام از Node ها آمد اطلاعات سطح اول آن Node را پر کنین و به همین ترتیب تا انتها.

این مثال کامل می تونه کارت رو راه بیاندازه:

HAMRAHSOFT.IR
شنبه 30 بهمن 1389, 08:39 صبح
نمایش:
1- این کد رو در Form1_Load قرار بده:


listView1.Clear();
listView1.Columns.Add("code");
listView1.Columns.Add("parentcode");
listView1.Columns.Add("codename");
listView1.View = View.Details;

و این کد رو هرجا که میخوای اطلاعات لود بشن قرار بده:


foreach (DataRow row in dataSet1.Tables["test"].Rows)
{
ListViewItem item = newListViewItem(row["code"].ToString());
item.SubItems.Add(row["parentcode"].ToString());
item.SubItems.Add(row["codename"].ToString());
listView1.Items.Add(item);
}
اضافه: متاسفانه مانند DataGridView نیست که بشه کاربر مستقیما این کار رو انجام بده
دوستان كسي نمونه كه با بانك كار كنه نداره؟

tooraj_azizi_1035
شنبه 30 بهمن 1389, 11:31 صبح
سلام،
ابتدا وارد Dataset Designer شو و یه Query به نام GetByParentID به TableAdapter جدولی که اطلاعات درخت رو نگه می داره اضافه کن. این Query یه پارامتر با نام @ParentID می گیره و تمام رکوردهایی رو که Parent اونها برابر پارامتر وارد شده هست رو بر می گردونه.
بعد یه متد به شکل زیر به برنامت اضافه کن:



private void ExploreTree(long ParentID, Node MyNode)
{
DataTable dt=new DataTable();
dt=YourTableAdapter.GetByParentID(ParentID);

foreach(DataRow dr in dt)
Mynode.Nodes.Add(dr["Value"];

foreach(DataRow dr in dt)
ExploreTree(dr["NodeID"], MyNode);

}

NodeID شناسه هر رکورد از جدول درخت است. ابتدا یکبار ExploreTree رو با ParentID برابر null صدا بزن تا گره های ریشه رو اضافه کنه. بقیه گره ها رو خودش اتوماتیک ایجاد می کنه.

HAMRAHSOFT.IR
شنبه 30 بهمن 1389, 13:49 عصر
سلام،
ابتدا وارد Dataset Designer شو و یه Query به نام GetByParentID به TableAdapter جدولی که اطلاعات درخت رو نگه می داره اضافه کن. این Query یه پارامتر با نام @ParentID می گیره و تمام رکوردهایی رو که Parent اونها برابر پارامتر وارد شده هست رو بر می گردونه.
بعد یه متد به شکل زیر به برنامت اضافه کن:



private void ExploreTree(long ParentID, Node MyNode)
{
DataTable dt=new DataTable();
dt=YourTableAdapter.GetByParentID(ParentID);

foreach(DataRow dr in dt)
Mynode.Nodes.Add(dr["Value"];

foreach(DataRow dr in dt)
ExploreTree(dr["NodeID"], MyNode);

}

NodeID شناسه هر رکورد از جدول درخت است. ابتدا یکبار ExploreTree رو با ParentID برابر null صدا بزن تا گره های ریشه رو اضافه کنه. بقیه گره ها رو خودش اتوماتیک ایجاد می کنه.
دوست خوب ممكن بصورت نمونه قزارش بديد

Ishtar_4552
یک شنبه 01 اسفند 1389, 14:21 عصر
با سلام به دوستان
حالا که موضوع تاپیک در مورد treeview هست من سوالم رو همین جا مطرح می کنم ، من یک جدول با ساختارزیر دارم که فیلدها و اطلاعات جدول به صورت زیر هست:


type Category Product ID
Type1 Cat1 Product1 1
Type2 Cat2 Product2 2
Type2 Cat1 Product1 3
Type1 Cat2 Product2 4
Type2 Cat3 Product1 5

می خوام این اطلاعات رو داخل یک treeview قرار بدم،با توجه به اینکه برای ایجاد گره پدر لازمه که اطلاعات رو از فیلد product بگیره وگره های فرزند رو هم از فیلد Category می گیره و گره های فرزند Categoryهم از فیلد type گرفته می شن ،مثلا برای جدول بالا برای رکورد Product1 باید یک چنین ساختاری ایجاد کنه:
Product1--> Cat1-->Type1
Type2
برای این کارنیاز به یک الگوریتم بهینه دارم،کسی تجربه ای در این زمینه داره؟

exlord
یک شنبه 01 اسفند 1389, 21:46 عصر
جستجو کردم از کد ها هم استفاده کردم به نتیجه نرسیدم.
یه جدول دارم با ساختار:code-parentcode-codename
می خوام اینو تویه tree view نمایش بدم بهش نود اضافه کنم ویرایش کنم حذف کنم.
با تشکر از یاریتان



DataTable dt = SelectAllFromDB();

foreach (DataRow row in dt.Rows)
{
string parentKey = row["parentcode"].ToString();
TreeNode n = new TreeNode(){
Text = row["codename"].ToString(),
Name= row["code"].ToString()
};
if (treeView1.Nodes.ContainsKey(parentKey))
treeView1.Nodes[parentKey].Nodes.Add(n);
else
treeView1.Nodes.Add(n);
}

exlord
یک شنبه 01 اسفند 1389, 21:56 عصر
با سلام به دوستان
حالا که موضوع تاپیک در مورد treeview هست من سوالم رو همین جا مطرح می کنم ، من یک جدول با ساختارزیر دارم که فیلدها و اطلاعات جدول به صورت زیر هست:


type Category Product ID
Type1 Cat1 Product1 1
Type2 Cat2 Product2 2
Type2 Cat1 Product1 3
Type1 Cat2 Product2 4
Type2 Cat3 Product1 5

می خوام این اطلاعات رو داخل یک treeview قرار بدم،با توجه به اینکه برای ایجاد گره پدر لازمه که اطلاعات رو از فیلد product بگیره وگره های فرزند رو هم از فیلد Category می گیره و گره های فرزند Categoryهم از فیلد type گرفته می شن ،مثلا برای جدول بالا برای رکورد Product1 باید یک چنین ساختاری ایجاد کنه:
Product1--> Cat1-->Type1
Type2
برای این کارنیاز به یک الگوریتم بهینه دارم،کسی تجربه ای در این زمینه داره؟


DataTable dt = SelectAllFromDB();

foreach (DataRow row in dt.Rows)
{
string productKey = row["Product"].ToString();
string catKey = row["Category"].ToString();
string typeKey = row["type"].ToString();

TreeNode nP = new TreeNode()
{
Text = productKey,
Name = productKey
};
TreeNode nC = new TreeNode()
{
Text = catKey,
Name = catKey
};
TreeNode nT = new TreeNode()
{
Text = typeKey,
Name = typeKey
};

if (!treeView1.Nodes.ContainsKey(productKey))
treeView1.Nodes.Add(nP);

if (!treeView1.Nodes[productKey].Nodes.ContainsKey(catKey))
treeView1.Nodes[productKey].Nodes.Add(nC);

if (!treeView1.Nodes[productKey].Nodes[catKey].Nodes.ContainsKey(typeKey))
treeView1.Nodes[productKey].Nodes[catKey].Nodes.Add(nT);
}