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

الRecursion + TTreeView

مغلق
بدأه AbuZakaria في 6 يونيو 2007 · 3 رد · 720 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

عندنا جدول الموظفين

Emp(EmpNo,Name,BossNo)

حيث ال BossNo رقم موظف اخر موجود في الجدول

كيف يمكن لنا رسم الموظفين باستخدام الTreeView بحيث يكون أسم الموظف الاعلى النقطة الرئيسية و الموظفين التابعين كافرع من النقطة الرئيسية و هكذا

#2

السلام عليكم ورحمة الله وبركاته

أخي AbuZakaria فعلا الكود الذي طلبته مهم جدا، وأنا أريد أن أساعدك ...

لكن أرجوا أن تعطينا مزيدا من التوضيح ... وأن تذكر محاولاتك والعقبات التي مررت بها لكي لا نعيدها ...

سؤال: بالنسبة للموضفين الذين ليس لديهم Boss أعلى منهم، أي هم في قمة الهرم، ماذا نضع في حقل BossNo الخاص بهم؟

الله يوفقك أخي ...

بسم الله الرحمن الرحيم " وقل رب زدني علما"

#3

السلام عليكم

لقد وجدت الحل مع افتراض أن الموظفين الذين هم في قمة الهرم لديهم القيمة '0' صفر في حقل BossNo

كذلك مع افتراض أن هناك خوارزمية أخرى تقوم بتدقيق مدخلات حقل BossNo حيث لا توجد حلقة بين الموظفين (مثلا لا يكون الموظف 1 تحت الموظف 2 وفي نفس الوقت الموظف 2 تحت الموظف 1)

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
Boss_exist:boolean;
begin
 treeview1.Items.Clear;
 table1.First;
 while not table1.Eof do
 begin
  if table1.FieldByName('BossNo').Asinteger=0 then
  treeView1.Items.Add(nil,table1.fieldbyname('EmpNo').asstring);
  table1.Next;
 end;

 while table1.RecordCount<>TreeView1.Items.Count do
 begin
  table1.First;
  while not table1.Eof do
  begin
   Boss_exist:=false;
   for i:=0 to TreeView1.Items.Count-1 do
   if TreeView1.Items.Text=table1.FieldByName('BossNo').AsString then
   begin
	Boss_exist:=true;
	break;
   end;
   if Boss_exist then
   TreeView1.Items.AddChild(TreeView1.Items,table1.fieldbyname('EmpNo').AsString);
   table1.Next;
  end;
 end;
 for i:=0 to treeview1.Items.Count-1 do
 begin
  table1.FindKey([TreeView1.Items.Text]);
  TreeView1.Items.Text:=table1.fieldbyname('Name').AsString;
 end;
end;

ملاحظة: لقد ملأت ال treeview في البداية بأرقام الموظفين EmpNo ثم في الأخير عوضت كل رقم بإسم الموظف وذلك لتفادي حدوث خلل عند وجود أكثر من موظف يحملون نفس الإسم

إذا كان لديك أي سؤال أو استفسار فنحن في الخدمة إن شاء الله

وفقك الله

تم تعديل هذه المشاركة بواسطة mohamed.dz في 14 يونيو 2007 في 14:37

بسم الله الرحمن الرحيم " وقل رب زدني علما"

#4

السلام عليكم ورحمة الله وبركاته

أبعث لك بالمثال التالي عسى أن يجيب على تساؤلك.

مع العلم أنه في مكونات Jedi يوجد مكون dbTree الذي يقوم بهذه المهمة دون برمجة.

وفقكم الله.

م. باحماني

DbTree.zip

هذا الموضوع مغلق.

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