الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الشجرة والعناصر الفرعية منها

بدأه mmsalman87 في 29 نوفمبر 2011 · 8 رد · 2,027 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لدي الجدول التالي في قاعدة البيانات

types

يحتوي على حقلين

الاول type

الثاني super node

اريد ان اقوم بادراج node type under super_node

الكود التالي يقوم بعرض type ولكن اريد ان اجعله ضمن super node

treeView1.Select();

treeView1.ExpandAll();

treeView1.Nodes.Clear();

SqlConnection myConnection = new SqlConnection(" Data Source =.\\SQLEXPRESS;AttachDBFilename=|DataDirectory|\\Database1.mdf;Integrated Security=True;User Instance=True;");

myConnection.Open();

SqlDataReader myReader;

SqlCommand myCommand = new SqlCommand("select * from TYPES", myConnection);

myReader = myCommand.ExecuteReader();

treeView1.Nodes.Add("Codes");

while (myReader.Read())

treeView1.Nodes[0].Nodes.Add(myReader["type"].ToString ());

myReader.Close();

int tr = treeView1.Nodes[0].Nodes.Count;

int t;

string tn;

for (t = 0; t < tr - 1; ++t)

tn = "0";

tn = treeView1.Nodes[0].Nodes[t].Text;

SqlCommand myCommand1 = new SqlCommand("select subject from codes where type='" + tn + "'", myConnection);

myReader = myCommand1.ExecuteReader();

while (myReader.Read())

treeView1.Nodes[0].Nodes[t].Nodes.Add(myReader["subject"].ToString ());

myReader.Close();

myConnection.Close();

}

وشكرا لكم

Maher Salman

Senior Oracle Developer

Oracle Certified Professional

Kuwait

اللهم إني أعوذ بك من الهم والغم والحزن،

وأعوذ بك من العجز والكسل والفشل،

وأعوذ بك من الجبن والبخل،

وأعوذ بك من الكفر والفقر،

وأعوذ بك من غلبة الدين وقهر الرجال

#2

يا اخوان ما في حدا يجاوبنا ع هالمشكلة

الموضوع اني بدي اعمل تفرعات من الشجرة sub nodes

وشكرا

Maher Salman

Senior Oracle Developer

Oracle Certified Professional

Kuwait

اللهم إني أعوذ بك من الهم والغم والحزن،

وأعوذ بك من العجز والكسل والفشل،

وأعوذ بك من الجبن والبخل،

وأعوذ بك من الكفر والفقر،

وأعوذ بك من غلبة الدين وقهر الرجال

#3

بصراحة انا حاولت افهم انت عايز ايه بس ما عرفتش وضح اكتر

كام جدول انت بتتعامل معاه ومين Master ومين Details

عرفنى الجداول واعمدتها اللى انت بتتعامل معاه ومين الأب ومين الأبن في الشجرة

#4

الاخ الكريم

عندي جدولين

الجدول الاول جدول الانواع وهو كالتالي

create table types(

type_id number

type_name varchar

super_type numer

)

الحقل اللي هوا super_type مرتبط self join يعني اذا كان فيه قيمة معنى ذلك ان الرقم سيكون السوبر عشان يطلع sub node في الشجرة

معلش انا مبرمج اوراكل واحنا هيك بنعملها باوراكل هل هذا ما يتم فعله في السي شارب

هدف البرنامج:

انا عندي كودات خاصة بي واريد ان احفظها ببرنامج

ولكن لدي تصنيفات وانواع للكودات

اريد ان يكون كل تصنيف تحته الكودات الخاصة به

هذه عملتها والحمد لله

لكن المشكلة الان اني اريد ان اعمل تصنيف بداخل تصنيف وشكرا

Maher Salman

Senior Oracle Developer

Oracle Certified Professional

Kuwait

اللهم إني أعوذ بك من الهم والغم والحزن،

وأعوذ بك من العجز والكسل والفشل،

وأعوذ بك من الجبن والبخل،

وأعوذ بك من الكفر والفقر،

وأعوذ بك من غلبة الدين وقهر الرجال

#5

السلام عليكم ...

  1. هذا الكود دائما يتكرر في برامج المحاسبة و التصنيفات و الموظفين (شجرة الحسات - التصنيفات- الموظفين {مدير الموظف هو بدوره موظف}) ..
  2. تعتمد الطريقة على جلب عناصر المستوى الأول و هي التي لا يكون لها أب أي قيمة super_type هي null ..
  3. ثم من أجل كل عنصر من عناصر المستوى الأول نجلب أولاده , ثم من أجل كل ولد نجلب أولاده بنفس الطريقة , و هذا هو مفهوم العودية Recursive أي أن الإجراء يستدعي نفسه و لكن بقيم مختلفة ..
  4. إليك الكود :
     SqlConnection connection;
        	SqlCommand command;
    
        	private void btnLoadTree_Click(object sender, EventArgs e)
        	{
            	treeView1.Nodes.Clear();
            	connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True");
            	connection.Open();
            	command = new SqlCommand();
            	command.CommandType = CommandType.Text;
            	command.CommandText = "SELECT type_id , type_name , super_type FROM types WHERE super_type IS NULL ;";
            	command.Connection = connection;
            	DataSet dataset = new DataSet();
            	SqlDataAdapter adapter = new SqlDataAdapter();
            	adapter.SelectCommand = command;
            	adapter.Fill(dataset);
    
            	//dataTable = dataset.Tables[0];
            	foreach (DataRow row in dataset.Tables[0].Rows)
            	{
                	TreeNode treeNode = new TreeNode();
                	treeNode.Text = row["type_name"].ToString();
                	int type_id = int.Parse(row["type_id"].ToString());
                	treeNode.Tag = type_id;
                	treeView1.Nodes.Add(treeNode);
                	LoadNode(treeNode, type_id);
            	}
            	treeView1.ExpandAll();
        	}
        	private void LoadNode(TreeNode treeNode , int type_id)
        	{
            	command.Parameters.Clear();
            	command.CommandText = "SELECT type_id , type_name , super_type FROM types WHERE super_type =@super_type ;";
            	command.Parameters.AddWithValue("@super_type", type_id);
    
            	DataSet dataset = new DataSet();
            	SqlDataAdapter adapter = new SqlDataAdapter();
            	adapter.SelectCommand = command;
            	adapter.Fill(dataset);
    foreach (DataRow row in dataset.Tables[0].Rows)
            	{
                	TreeNode childTreeNode = new TreeNode();
                	childTreeNode.Text = row["type_name"].ToString();
                	int child_type_id = int.Parse(row["type_id"].ToString());
                	childTreeNode.Tag = child_type_id;
                	treeNode.Nodes.Add(childTreeNode);
                	LoadNode(childTreeNode, child_type_id);
            	}
        	}

  5. لاحظ تم تعريف الــ SqlConnection و الــ SqlCommand كمتحولات على مستوى الفورم كي يمكن استخدامهما في جميع الأجرائيات ..
  6. مشكلة هذه الطريقة هي الوصول المتكرر لقاعدة البيانات , و يسمى هذا بــ chatty Interface .. و هناك حل آخر بأن نجلب كل البيانات دفعة واحدة و نفرزها على شكل شجرة في الذاكرة , لكن هذه الطريقة تعمل من أجل البيانات الصغيرة الحجم .
  7. يمكنك جعل البرنامج أكثر تطورا , بإضافة قائمة يمينية لإضافة و حذف العقد و إمكانية سحب عنصر من عقدة لإخرى , طالما أن الــ type_id مخزن في حقل الــ tag للعقدة ..

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 10 ديسمبر 2011 في 01:37

1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#6

نعم صحيح بارك الله فيك تم حل المشكلة وجزاك الله كل خير

اخي عملت طريقة context menu strip

على الشجرة

ولكن لدي مشكلة بسيطة

كيف اعرف قيمة type_id للنود الذي يندرج تحته الكود حتى استطيع اضافة كود جديد لهذا التفرع وشكرا

تم تعديل هذه المشاركة بواسطة mmsalman87 في 11 ديسمبر 2011 في 15:27

Maher Salman

Senior Oracle Developer

Oracle Certified Professional

Kuwait

اللهم إني أعوذ بك من الهم والغم والحزن،

وأعوذ بك من العجز والكسل والفشل،

وأعوذ بك من الجبن والبخل،

وأعوذ بك من الكفر والفقر،

وأعوذ بك من غلبة الدين وقهر الرجال

#7

السلام عليكم ..

  1. هذه محاولة بسيطة مني في المرفقات , إذا كانت لا تحقق المطلوب , فابدأ بموضوع جديد .
  2. ملاحظات :
    1. المثال تعليمي و بالتالي قد تجد أخطاء أو أشياء ناقصة .
    2. أقوم بتحميل كامل الــ TreeView بعد كل عملية إضافة أو تعديل و يمكنك تطوير ذلك , بإعادة تحميل العقدة التي تم التغير فيها فقط و العقد الأخرى المتأئرة .
    3. بالنسبة لسؤالك ,عن معرفة الــ type_id , فيمكنك تخزينه في حقل الــ Tag للــ TreeNode .
    4. أنا استخدم الــ oop و بالتالي أخزن في حقل الــ Tag كامل الكائن Object الذي يمثل سطرمن الجدول و اسمه Types .

      ArabTeamTree.rar

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 11 ديسمبر 2011 في 15:46

2

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#8

اخي الكريم

بارك الله فيك وجزاك الله كل خير

نجحت الطريقة معي واستطعت اخذ الرقم من خلال ال tag

وكل شيئ تمام وفعلا افدتني كثيرا

قمت بتخزين قيمة الرقم الماخوذة في متغير موجود في ال setting of project

والان انتهى عندي كل شيء وبقي بعض التحسينات ع البرنامج مثل اضافة خاصية البحث عن طريق اسم الكود او تفاصيل الكود

بارك الله فيك وجزاك الله كل خير ونفع بك الاسلام والمسلمين

Maher Salman

Senior Oracle Developer

Oracle Certified Professional

Kuwait

اللهم إني أعوذ بك من الهم والغم والحزن،

وأعوذ بك من العجز والكسل والفشل،

وأعوذ بك من الجبن والبخل،

وأعوذ بك من الكفر والفقر،

وأعوذ بك من غلبة الدين وقهر الرجال

#9

اخى الفاضل اننى استأذنك فى توضيح هذا الامر

هل مايقصده الاخ السائل هو كود فى نظام اداره قواعد البيانات الهرميهhierarachical dbms

ام امر اخر

قاربت صحيفة هذا العام أن تطوى ولن تفتح إلا يوم القيامة فأكثر من الاستغفار

مواضيع مشابهة