PDA

View Full Version : مبتدی: بایند اطلاعات دیتا ست به TreeView



ozzy_mra
یک شنبه 26 دی 1389, 13:26 عصر
سلام
من یه تیبل با ظاهر زیر دارم


که در واقع برای یه برنامه حسابداریه این تیبل سرفصل هاست که شامل اطلاعات کل و جزئ و معین و ... می باشد
البته این تصویر مال یه ویو از چهار تا تیبله می خوام سرغصل هامو تو TreeView نشون بدم یعنی اول کل ها و بعد فرزندان هر کل معین های مربوط به اون باشه و همینطور تا آخر
خیلی گیج شدم میشه راهنماییم کنید؟ ممنون

ozzy_mra
دوشنبه 27 دی 1389, 12:32 عصر
من این کد رو پیدا کردم و به روش زیر اطلاعاتم رو به تری ویو بایند کردم

try
{
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=shahed_account;Integrated Security=True");
SqlDataAdapter da;
DataSet ds = new DataSet();
con.Open();
da = new SqlDataAdapter("SELECT * FROM uView4SathiSarfasl ORDER BY KolCode,MoinCode,TafziliCode,JozeCode", con);
da.Fill(ds);

foreach (DataRow row in ds.Tables[0].Rows)
{
if (row["KolTitle"].ToString() != "")
{
TreeNode treeNode1 = new TreeNode(row["JozeTitle"].ToString());
TreeNode treeNode2 = new TreeNode(row["TafziliTitle"].ToString(), new TreeNode[] { treeNode1 });
TreeNode treeNode3 = new TreeNode(row["MoinTitle"].ToString(), new TreeNode[] { treeNode2 });
TreeNode treeNode4 = new TreeNode(row["KolTitle"].ToString(), new TreeNode[] { treeNode3 });

treeView1.Nodes.AddRange(new TreeNode[] { treeNode4 });
}
}
con.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
حالا یه سوال؛ برای هر کدوم از نود هام چطور میتونم یه value در نظر بگیرم مثلاً برای نودی که KoleTitle رو نمایش میده مقدار KoleCode رو به عنوان value در نظر بگیره
سوال دیگه اینکه از کجا مقدار value و Text نود انتخاب شده و نود های پدرش رو بدست بیارم؟
خواهش می کنم راهنماییم کنید خیلی ضروریه:افسرده:

ozzy_mra
دوشنبه 27 دی 1389, 14:03 عصر
یه همچین کدی منظورمه این کد فکر کنم برای asp.net باشه که تو C# جواب نداد

TreeNode node = new TreeNode();
node.Text = row["GroupName"].ToString();
node.Value = row["GroupID"].ToString();

MortezaGity
دوشنبه 27 دی 1389, 14:52 عصر
اینو ببین

http://www.codeproject.com/KB/tree/dbTree.aspx

موفق باشی

ozzy_mra
سه شنبه 28 دی 1389, 11:30 صبح
اینو ببین

http://www.codeproject.com/KB/tree/dbTree.aspx

موفق باشی
راستش این مثاله کداش خیلی خیلی حرفه اییه من که چیزی سر در نیاوردم خودتون مثالی چیزی ندارید:گیج:

shuriken
سه شنبه 28 دی 1389, 11:52 صبح
1سرم به این سایت بزن
کلی مثال هم توش هست
اگه بازم حل نشد بم بگو :چشمک:
http://msdn.microsoft.com/en-us/library/system.windows.forms.treenode.aspx

shuriken
چهارشنبه 29 دی 1389, 07:56 صبح
دوست عزیز
این برنامرو با دقت نگاه کن توضیحاتیم که توش نوشتم حتما مطالعه کن امیدوارم مشکلت حل شه.

65240

ozzy_mra
شنبه 02 بهمن 1389, 12:00 عصر
دوست عزیز TreeView ایونتی برای اینکه معلوم بشه کدوم نود کلیک شده نداره؟این برنامه ای که شما زحمتشو کشیدید خیلی از مشکلاتمو حل کرد غفط می خوام کاربر با کلیک روی هر سطح نود اطلاعات Text و Tag اون نود و نود های بالاییشو تو تکست باکس نشون بده یعنی به محض کلیک اطلاعاتو نشون بده که اگه اشتباه انتخاب کرده بود سریع بتونه نود درست رو انتخاب کنه

shuriken
شنبه 02 بهمن 1389, 12:11 عصر
چرا داره تو همون برنامه خوب نگاه کن متوجه میشی
از رخداد AfterSelect استفاده کن
این سایتم نگاه کن
http://msdn.microsoft.com/en-us/library/system.windows.forms.treeview.afterselect.aspx

ozzy_mra
شنبه 02 بهمن 1389, 13:15 عصر
ببخشید یکم گیج میزنم

treeView1.Nodes[0].Text + treeView1.Nodes[0].Tag
می خوام جای اون صفره اندیس گره انتخاب شده رو بزارم ایونت selectedNode یا selectedItem یا ... نداشت راهی داره؟؟؟

shuriken
شنبه 02 بهمن 1389, 13:43 عصر
وقتو خود نود رو داری نیازی به ایندکسش نیست از کد زیر استفاده کن


private void TreeView1_AfterSelect(Object sender,
TreeViewEventArgs e)
{
string str = e.Node.Text + e.Node.Tag;
}

ozzy_mra
یک شنبه 03 بهمن 1389, 11:26 صبح
خیلی ممنون تابع شما رو اینجوری تغییرش دادم درست شد، از لطفتون ممنون

void mGetChilds(List<string> strPath, int level)
{

try
{

TreeNode temp_node = treeView1.Nodes[strPath[0]];
if (level == 0)
{
textBox1.Text = temp_node.Tag.ToString();
textBox2.Text = temp_node.Text;
}
else if (level == 1)
{
textBox1.Text = temp_node.Tag.ToString();
textBox2.Text = temp_node.Text;
textBox4.Text = temp_node.Nodes[strPath[1]].Tag.ToString();
textBox3.Text = temp_node.Nodes[strPath[1]].Text.ToString();
}
else if (level == 2)
{
textBox1.Text = temp_node.Tag.ToString();
textBox2.Text = temp_node.Text;
textBox4.Text = temp_node.Nodes[strPath[1]].Tag.ToString();
textBox3.Text = temp_node.Nodes[strPath[1]].Text.ToString();
textBox6.Text = temp_node.Nodes[strPath[1]].Nodes[strPath[2]].Tag.ToString();
textBox5.Text = temp_node.Nodes[strPath[1]].Nodes[strPath[2]].Text.ToString();
}
else if (level == 3)
{
textBox1.Text = temp_node.Tag.ToString();
textBox2.Text = temp_node.Text;
textBox4.Text = temp_node.Nodes[strPath[1]].Tag.ToString();
textBox3.Text = temp_node.Nodes[strPath[1]].Text.ToString();
textBox6.Text = temp_node.Nodes[strPath[1]].Nodes[strPath[2]].Tag.ToString();
textBox5.Text = temp_node.Nodes[strPath[1]].Nodes[strPath[2]].Text.ToString();
textBox8.Text = temp_node.Nodes[strPath[1]].Nodes[strPath[2]].Nodes[strPath[3]].Tag.ToString();
textBox7.Text = temp_node.Nodes[strPath[1]].Nodes[strPath[2]].Nodes[strPath[3]].Text.ToString();
}

}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}

shuriken
یک شنبه 03 بهمن 1389, 13:42 عصر
خواهش میکنم
فقط یه موضوعی هست.
اینی که شما نوشتی چیز خوبیه البته فقط برای برنامه ای که داری مینویسی
چون انعطاف پذیر نیست. مثلا اگه تعداد لایه ها بیشتر بشه نمیتونی از این روش استفاده کنی.
ولی بهرحال برای کارت روش خوبیه (;

بازم اگه سوالی واست پیش اومد در خدمتم

ozzy_mra
دوشنبه 04 بهمن 1389, 09:24 صبح
بله درسته ولس چون خیلی فوری بود مجبور شدم
بهر حال ممنون خیلی لطف کردید