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

النقر على سجل داخل Dbgrid فيعرض السجل في Dbedit

بدأه وضاح الخير في 1 ديسمبر 2008 · 8 رد · 3,469 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

إخواني الأعزاء..

عندي جدول Students وجدول Courses و جدول النتائج Results و جدول المدربين Inst

جدول النتائج يحتوي على

Stud_id

Course_id

Inst_id

Grade

start_date_course

end_date_course

فأنا اريد عرض أسماء الدورات و اسماء الطلاب و اسماء المدربين و ليس أرقامهم فقمت باستخدام

form5.DBGrid1.DataSource :=form1.DataSource5;

form1.adoquery1.Active := false;
form1.adoquery1.SQL.Clear;
form1.adoquery1.SQL.Add('select stud_name as [اسم الدارس],courses.course_name as [اسم الدورة],name_inst as [اسم المدرب],result.start_date_course as[بداية الدورة],result.end_date_course as[نهاية الدورة],result.grade as[الدرجة]');
form1.adoquery1.SQL.Add(' from Students,courses,inst,result where (students.stud_id =result.stud_id) and (courses.course_id=result.course_id)And (Inst.id_inst=result.inst_id)');
form1.adoquery1.Active := true;

و مشي معاي تمام و عرضها في DBGRID و لكن أريد عند النقر على السجل في DBGRID يذهب مباشرة الى DBEDITS الموجودة في الفورم و المربوطة بالحقول و يعرض البيانات اليها أو اريد التعديل في DBGRID فيتغير البيانات في الجدول و يرعض السجل المعدل في DBEDITS

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

#2

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

إذا كانت مكونات الـ DBEdit مرتبطة بنفس الـ DataSource المرتبطة بها الـ DBGrid (و بالتالي نفس الـ Query أو الـ Table) فأنت لا تحتاج إلى أي كود لمزامنة محتويات مكونات الـ DBEdit مع محتويات الـ DBGrid.

بعد إجراء التعديل في أي خلية في الـ DBGrid اضغط Enter أو انتقل إلى خلية أخرى و ستلاحظ التغيير مباشرة في الـ DBEdit المرتبط بنفس الحقل. كذلك إذا أجريت التعديل على الـ DBEdit فإنه بمجرد الخروج من ذلك المكون ستلاحظ التغيير في الحقل المقابل في الـ DBGrid.

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

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

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

#3

شكراً على الرد لا ليس مرتبط معه أنا لدي جدول النتائج مرتبط بـ DATASOURCE4و عملت Query مرتبط DATASOURCE5 ولكن لم يحدث التغيير عند النقر على DBGRID .

و كيف اغير في DBGRID و يتغير في الجدول مباشرة

#4

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

  1.  
  2. procedure TForm1.DBGrid1CellClick(Column: TColumn);
  3. begin
  4. E1.Text := dbgrid1.Columns[1].Field.AsString;
  5. E2.Text := dbgrid1.Columns[2].Field.AsString;
  6. E3.Text := dbgrid1.Columns[3].Field.AsString;
  7. end;
  8.  

فسوف يظهر بــ Edit البيانات حسب ما موجود

قم بوضع زر تحديث حسب ID

Comming Soon

#5

و الله ما قصرتم اخواني بس لا ينتقل الى نفس السجل فأنا أريد عند النقر على السجل في DBgrid ينتقل مؤشر DBNavigator الى السجل المختار و شكراً.

#6

أخي الكريم ..

ضع داخل حدث OnDblClick في DBGrid الإجراء التالي:

1- إذا أردت نقل مكونات السطر في الشبكة إلى مربع النص.

خزن المعلومات التي تريد عرضها في DBEDITS في متغير والتي أخذتها من DataSet التابعة للـDBGrid ، ثم أسند المتغير إلى DBEDITS لعرضها، ثم أنقل التركيز إلى DBEDITS عن طريق SetFocus.

2- إذا غيرت في حقول بيانات القاعدة المربوطة بالشبكة وكان هناك حقل يدل على حقل قاعدة البيانات المربوطة بمربع النص فإن الإجراء Locate يفي بالغرض.

مع تمنياتي بالتوفيق.

أخوك / نجم

تم تعديل هذه المشاركة بواسطة نجم في 3 ديسمبر 2008 في 04:53

#7

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

هذا مثال عند الضغط على حقل ضمن dbgrid يقوم بجمع قيمة عمودين وطرحهما من بعض , وإضهار النتائج في edit لاأعرف إن كان هو المطلوب

الكود في الحدث On cel1click أو في الحدثOn dblclick

بالتوفيق

begin


Htd:=0;
HTY:=0;
DM.tamountf.First;
while not DM.tamountf.Eof do
begin
Htd:=StrToFloat(DBGrid1.Fields[1].Text)+Htd;
HTY:=StrToFloat(DBGrid1.Fields[2].Text)+HTY;

DM.tamountf.Next;
end;
Edit5.Text:=FloatToStr(htd);
EDIT6.Text:=FLOATTOSTR(HTY);
EDIT7.Text:=Floattostr(htd-hty);
end;

Htd,Hty هي متغيرات من نوع Double

تم تعديل هذه المشاركة بواسطة talal ibrahim belal في 3 ديسمبر 2008 في 05:09

#8

جزاكم الله ألف خير ..سوف أجرب اقتراحاتكم إن شاء الله.

و لكن جاءتني فكرة هو بما أن السجلات مرتبة في DBgrid بحسب الترتيب في الجدول فهل ممكن معرفة رقم الصف الذي نقرت عليه ثم تأخذه في متغير و تعمل على أن ينتقل مؤشر DBNavigator الى هذا المتغير فيمون مثلاً انه تم نقر الصف 6 فيضع الرقم في متغير و يضع هذا المتغير في Index للحق بحيث ينتقل اليه .

#9

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

طبعاً ممكن. من خلال الكود الموجود في مشاركتك الأولى، الـ DBGrid مرتبطة بـ form1.adoquery1. أضف الحقل Stud_id إلى جملة Select الخاصة بهذا الـ Query. أتوقع أن الحقل Stud_id هو رقم تعريف سجل الطالب، و الرقم لا يتكرر.

في الحدث AfterScroll لنفس ذلك الـ Query اكتب الكود التالي:

  1.  
  2. procedure form1.adoquery1AfterScroll(DataSet: TDataSet);
  3. begin
  4. DBNavigator1.DataSource.DataSet.Locate('Stud_id', DataSet['Stud_id'], []);
  5. end;
  6.  

إذا كان الـ DBNavigator موجود في Form أخرى فيجب إضافة اسم الـ Form قبل اسم الـ DBNavigator.

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

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

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

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