جستجو کردم از کد ها هم استفاده کردم به نتیجه نرسیدم.
یه جدول دارم با ساختار:code-parentcode-codename
می خوام اینو تویه tree view نمایش بدم بهش نود اضافه کنم ویرایش کنم حذف کنم.
با تشکر از یاریتان
جستجو کردم از کد ها هم استفاده کردم به نتیجه نرسیدم.
یه جدول دارم با ساختار:code-parentcode-codename
می خوام اینو تویه tree view نمایش بدم بهش نود اضافه کنم ویرایش کنم حذف کنم.
با تشکر از یاریتان
نمایش:
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 نیست که بشه کاربر مستقیما این کار رو انجام بده
سلام.
من tree view گفتم این که شما کدشو نوشتین list view .
بیشتر توضیح بدین.
خیلی به این کد احتیاج دارم.
با تشکر
خوب شما می تونین این کار رو به صورت OnDemand انجام بدین که به نظر من بهترین روش است. OnDemand به این معنی که هر وقت در خواست برای باز شدن یک Nodeدر درختان آمد اطلاعات آن رو باز کنین و نمایش بدین.
برای اینکار شما ابتدا باید سطح اول درخت را که در حقیقت ParentCodeشان خالی است را پر کنین و سپس وقتی درخواست باز شدن هر کدام از Node ها آمد اطلاعات سطح اول آن Node را پر کنین و به همین ترتیب تا انتها.
این مثال کامل می تونه کارت رو راه بیاندازه:
سلام،
ابتدا وارد 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 صدا بزن تا گره های ریشه رو اضافه کنه. بقیه گره ها رو خودش اتوماتیک ایجاد می کنه.
با سلام به دوستان
حالا که موضوع تاپیک در مورد treeview هست من سوالم رو همین جا مطرح می کنم ، من یک جدول با ساختارزیر دارم که فیلدها و اطلاعات جدول به صورت زیر هست:
type Category Product IDمی خوام این اطلاعات رو داخل یک treeview قرار بدم،با توجه به اینکه برای ایجاد گره پدر لازمه که اطلاعات رو از فیلد product بگیره وگره های فرزند رو هم از فیلد Category می گیره و گره های فرزند Categoryهم از فیلد type گرفته می شن ،مثلا برای جدول بالا برای رکورد Product1 باید یک چنین ساختاری ایجاد کنه:
Type1 Cat1 Product1 1
Type2 Cat2 Product2 2
Type2 Cat1 Product1 3
Type1 Cat2 Product2 4
Type2 Cat3 Product1 5
Product1--> Cat1-->Type1
Type2
برای این کارنیاز به یک الگوریتم بهینه دارم،کسی تجربه ای در این زمینه داره؟
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);
}
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);
}