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

أريد أن أعرف أين الخطأ في هذا الكود

بدأه المستفيد1 في 26 أغسطس 2008 · 5 رد · 711 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

أخوني وحبايبي

هذا جدول برضه للأساتذة والتلاميذ ولكنه هذه المرة في جدول واحد وجعلت قيمة ثابتة للمدرس وقيمة ثابتة للتلميذ بحيث أنه إذا كان المدرس قيمته (1) فيكون في الشجرة كأصل، وإذا كان التلميذ قيمته (2) يكون في الشجرة فرع للأصل السابق

والحمدلله ربنا وفقني وعرفت أكتب الكود :P في TreeView العادية

وكذلك نفس الكود شغال مع المكون dxTreeView

لكن مع المكون dxDBTreeView لم يفلح فأرجو أن أعرف لماذا

var
N: TTreeNode;
begin
Table1.DisableControls;
Table1.First;
while not Table1.Eof do
begin
if Table1.Fields[2].Value = '1' Then
N:= dxDBTreeView1.Items.AddChild(Nil,Table1.Fields[1].AsString)
else
dxDBTreeView1.Items.AddChild(N,Table1.Fields[1].AsString);
Table1.Next;
end;
end;

الأمر الثاني:

أنا أريد أن أعرف كيف أجعل الـ TreeView العادية تعمل مع الجدول أي عندما أضغط على عقدة في الشجرة تظهر في الجدول أيضا

_____________________.rar

جزاكم الله خيرا

#2

ساعدوني يا شباب ولو حتى في الطلب التاني فقط : (كيف أجعل الـ TreeView العادية تعمل مع الجدول أي عندما أضغط على عقدة في الشجرة تظهر في الجدول)

#3

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

اقتباس
عندما أضغط على عقدة في الشجرة تظهر في الجدول

إذا كنت تقصد أن يتم الانتقال إلى سجل الأستاذ أو التلميذ في الجدول حسب العقدة التي يتم نقرها في الشجرة فاتبع التالي:

1. يجب أن يكون في الجدول حقل تعريف قيمة فريدة لكل سجل (مثلاً حقل ID يحتوي على قيمة عددية خاصة لكل سجل بحيث لا تتكرر مع سجل آخر).

2. عند إضافة العقد إلى الشجرة استعمل المنهج AddChildObject (بدل AddChild) لربط كل عقدة برقم السجل الذي تمثله في الجدول.

3. عند تحديد أي عقدة اقرأ القيمة المرتبطة بها ثم استعمل تلك القيمة لإجراء عملية بحث عادية في الجدول.

في الكود التالي سنفترض أن حقل التعريف هو أول حقل، أي Fields[0]:

  1. if Table1.Fields[2].Value = '1' Then
  2. N := TreeView1.Items.AddChildObject(Nil, Table1.Fields[1].AsString,
  3. TObject(Table1.Fields[0].AsInteger))
  4. else
  5. TreeView1.Items.AddChildObject(N, Table1.Fields[1].AsString,
  6. TObject(Table1.Fields[0].AsInteger));
  7.  

لاحظ أن المنهج AddChildObject يحتوي على بارامتر ثالث من النوع Pointer و هو يمثل قيمة الخاصية Data للـ TreeNode. لاحظ أيضاً كيف نقوم بعملية تحويل قسري (Type casting) للنوع Integer إلى النوع TObject حتى يكون مقبولاً كـ Pointer.

و في الحدث OnChange للـ TreeView (بفرض أن الحقل الأول Fields[0] اسمه ID):

  1. var
  2. ID: Integer;
  3. begin
  4. ID := Integer(Node.Data);
  5. Table1.Locate('ID', ID, []);
  6.  

لاحظ مرة أخرى كيف نستعمل الـ Type Casting لتحويل قيمة الخاصية Data (من النوع Pointer) إلى النوع Integer.

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#4

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

جزاك الله خيرا على شرحك الغالي

اقتباس
إذا كنت تقصد أن يتم الانتقال إلى سجل الأستاذ أو التلميذ في الجدول حسب العقدة التي يتم نقرها في الشجرة
نعم هذا هو ما أقصده تماما، أريد أن أجعل الشجرة كمفتاح للتنقل بين السجلات كما في العنصر (DBNavigator)

وقد نفذت الكود بالطريقة التي شرحتها

لكن يبدو أن المشكلة عندي كما هي بل الآن عندما أضغط على أي عقدة في الشجرة ثم أذهب إلى DBGrid أجد أن القيمة في الجدول تتغير حسب المكان الذي وقفت عليه في الشجرة.

أرجو أن تخبرني بالصواب، وشاكر لك تعبك معي

_____________________.rar

#5

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

إذا كان الكود الذي لديك مطابق للكود المرفق في مشاركتك الأخيرة فإن مشكلته بسيطة، إذ أنه ينقصه إعادة تفعيل المكونات المتصلة بالجدول لأنك تعطلها في البداية باستعمال Table1.DisableControls. و لهذا بعد انتهاء حلقة القراءة من الجدول أضف السطرين التاليين:

  1. Table1.First;
  2. Table1.EnableControls;
  3.  

و غير ذلك فإن الكود التجريبي يعمل بشكل صحيح عندما قمت بتجربته في مثالك المرفق (بعد إضافة السطرين السابقين)، و ذلك الكود لا يحتوي على أية تعليمات لتعديل البيانات في الجدول.

نصيحة: لا تستعمل رموز (مثل & في Teachers&Students) أو أسماء (مثل اسم الحقل Name) عند تسمية الحقول و الجداول و غيرها لأنها قد يكون لها معاني خاصة في بعض البرامج التي تتعامل معها.

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#6

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

شكرا لك أخي الفاضل على حسن صنيعك معي، الحمدلله، دلوقت بقى كله تمام

اقتباس
نصيحة: لا تستعمل رموز (مثل & في Teachers&Students) أو أسماء (مثل اسم الحقل Name) عند تسمية الحقول و الجداول و غيرها لأنها قد يكون لها معاني خاصة في بعض البرامج التي تتعامل معها
نعم سأتذكر نصحيتك هذه دوما

بارك الله فيك

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