ورود

View Full Version : پر کردن سلسله مراتبی tree view از sql server



f_g1348
پنج شنبه 05 شهریور 1388, 08:23 صبح
سلام
من یه راهنمایی می خواهم.
می خواهم یه tree view تعریف کنم که بصورت پویا از sqlserver2005 پر بشه .
نکته اینجاست که می خواهم بصورت سلسله مراتبی باشه بدین صورت که بعضی از گره ها گره اصلی و بعضی دیگر زیر گره .
کلا من می خواهم این قابلیت در برنامه ام باشه که به کاربر امکان تعریف online گره کنم که در دیتا بیس ذخیره بشه.
نمی دونم فیلد های جدول را چطور تعریف کنم که بصورت اصلی و زیر گروه باشد و چطور در برنامه در tree view قرار دهم.
ممنون می شم کسی کمک کنه.

Happy_davood
پنج شنبه 05 شهریور 1388, 08:35 صبح
ساختار بانک اطلاعاتی رو به این صورت پیشنهاد می کنم .


NodeCode
NodeTitle
ParentNodeCode

خوب من خودم از این روش استفاده می کنم . یعنی هر گره باید بدون که زیر مجموعه کدوم گره قرار داره .

این هم کد برای پر کردن درخت :


this.treeViewStockClasses.Nodes.Clear();

System.Data.SqlClient.SqlCommand sqlCommand = new System.Data.SqlClient.SqlCommand();
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandType = CommandType.Text;
sqlCommand.CommandText = "SELECT * FROM Nodes WHERE NodeCode <> 0";

System.Data.SqlClient.SqlDataAdapter SqlDataAdapter = new System.Data.SqlClient.SqlDataAdapter();
SqlDataAdapter.SelectCommand = sqlCommand;

this.DataTableNodes = new DataTable();

SqlDataAdapter.Fill(DataTableNodes);

this.treeViewStockClasses.BeginUpdate();
for (int i = 0; i < this.DataTableNodes.Rows.Count; i++)
{
if (this.DataTableNodes.Rows[i]["ParentNodeCode"].ToString() == "0")
{
this.treeViewStockClasses.Nodes.Add(this.DataTable Nodes.Rows[i]["NodeCode"].ToString(), this.DataTableNodes.Rows[i]["NodeTitle"].ToString());
this.AddNode(this.treeViewStockClasses.Nodes[this.treeViewStockClasses.Nodes.Count - 1]);
}
}
this.treeViewStockClasses.EndUpdate();




private void AddNode(System.Windows.Forms.TreeNode CurrentNode)
{
for (int i = 0; i < this.DataTableNodes.Rows.Count; i++)
{
if (this.DataTableNodes.Rows[i]["ParentNodeCode"].ToString() == CurrentNode.Name.ToString())
{
CurrentNode.Nodes.Add(this.DataTableNodes.Rows[i]["NodeCode"].ToString(), this.DataTableNodes.Rows[i]["NodeTitle"].ToString());
this.AddNode(CurrentNode.Nodes[CurrentNode.Nodes.Count - 1]);
}
}
}


البته این روش کاملاً ابتکاری هست و من خودم ایجادش کردم . شاید روش های بهتری هم باشه . البته الگوریتم یه الگوریتم بازگشتی ساده ست .

f_g1348
پنج شنبه 05 شهریور 1388, 08:50 صبح
با تشکر از شما دوست عزیز
فقط یه سوال چون من می خواهم این برنامه را با vb.net بنویسم بعضی از این دستورات را در c نمی دانم اگر معادل vb.net آن را دارید ممنون می شوم .
در غیر اینصورت لطفا بگویید که پارامتر addnode دقیقا چیه و معادلش در vb.net چیه ؟
با تشکر

Happy_davood
پنج شنبه 05 شهریور 1388, 09:06 صبح
دوست عزیز این برنامه از دو تیکه تشکیل شده . تیکه اول الگوریتم بازگشتی رو راه اندازی می کنه . تیکه دوم هم همون تابه AddNode هست . پس AddNode ارتباطی به C# نداره و یه تابع معمولی هست که بصورت بازگشتی خودش رو فراخوانی می کنه .

f_g1348
پنج شنبه 05 شهریور 1388, 09:20 صبح
با تشکر از راهنمایی شما
شرمنده ولی treeviewstockclasses چیه ?

Happy_davood
پنج شنبه 05 شهریور 1388, 10:15 صبح
ای بابا ای چه سئوالیه ! می خواستید چی باشه !؟
خوب treeViewStockClasses همون کنترل TreeView هست که از ToolBox انداختید روی فرم دیگه !

Mahdi.Kiani
پنج شنبه 05 شهریور 1388, 11:28 صبح
سلام
غیر از روش های معمول و قدیمی که اکثرا ابتکاری هم هستند و به روش های مختلفی پیاده سازی می شوند، اگر از sql server 2008 استفاده می کنید، نوع داده جدیدی در این زمینه به آن اضافه شده که برای پیاده سازی یک چنین فرایند هایی است. نام این نوع داده جدید hierarchyid می باشد که اطلاعات بیشتر در این مورد را می توانید در این لینک (http://technet.microsoft.com/en-us/library/bb677173.aspx) مشاهده کنید./
موفق باشید