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

Dbgrid

بدأه hanitaieb في 21 أكتوبر 2008 · 12 رد · 2,265 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

  • 1
  • هل من الممكن جعل سطر من اسطر DBGrid غير مفعل اى لايمكن الكتابة فيه .

  • 2
  • و هل من الممكن ايضا تغير ارتفاع هدا السطر .

و هدا كله بدون التاثير على باقى الاسطر .

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

تم تعديل هذه المشاركة بواسطة hanitaieb في 21 أكتوبر 2008 في 22:29

#2

بالنسبة لإرتفاع السطر

procedure TForm1.Button1Click(Sender: TObject);
begin
كل الأسطر
tstringgrid(dbgrid1).defaultrowheight:=25;
سطر معين
tstringgrid(dbgrid2).rowheights[1] := 25;

end;

أما بالنسبة لجعل سطر معين غير قابل للتعديل :hmm:

سبب التعديل إضافة صورة

post-143282-1224621673_thumb.jpg

تم تعديل هذه المشاركة بواسطة rober في 21 أكتوبر 2008 في 23:41

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#3

بالنسبة لارتفاع السطر فقد اجابك الاخ Rober مشكور

بالنسبة عدم تفعيل سطر

اذا كان قصدك تسجيلة معينة فاليك هذا الكود وضعه في خاصية oncellclick للمكون Dbgrid

if Table1.FieldByName('id').Value=1 then
DataSource1.AutoEdit:=false
else
DataSource1.AutoEdit:=True;

بالتوفيق

اللهم علمنا ما ينفعنا وانفعنا بما علمتنا وانفع الناس بنا واغفر لنا وارحمنا

#4

أخي الكريم حقيقة أنا لا أعرف شي عن قواعد البيانات أو مكوناتها لكن جرب هذا الحل الذي فكرا فيه

بما أن DBGrid مشتق من TCustomGrid

type
 TVGrid = class (TCustomGrid)
end;

الان في الحدث onClick للمكون DBGrid

if TVGrid(DBGrid1).Row = 2 then
   TVGrid(DBGrid1).Row := 1

هذا الكود سوف ينقل التركيز عن السطر 2 أي أن السطر 2 غير مفعل

#5

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

بالنسبة إلى منع تعديل سطر (سجل) معين، فكما قال الأخ "علي .ع" بالتأكيد أنك ستعتمد على شرط معين لتحديد ذلك السجل.

يمكن الاستفادة من الحدث OnAfterScroll للـ DataSet المرتبطة بها الـ DBGrid (أي الجدول أو الاستعلام المرتبطة به) للتأكد من وجود الشرط ثم منع التحرير في الـ DBGrid:

1. بجعل الـ DBGrid ككل للقراءة فقط:

  1. procedure TFRtlForm1.ADOTable1AfterScroll(DataSet: TDataSet);
  2. begin
  3. if ADOTable1.FieldByName('CustID').AsInteger = 7 then
  4. DBGrid1.ReadOnly := True
  5. else
  6. DBGrid1.ReadOnly := False;
  7. end;
  8.  

2. أو بمنع عملية التحرير:

  1. procedure TFRtlForm1.ADOTable1AfterScroll(DataSet: TDataSet);
  2. var
  3. Options: TDBGridOptions;
  4. begin
  5. Options := DBGrid1.Options;
  6.  
  7. if ADOTable1.FieldByName('CustID').AsInteger = 7 then
  8. Exclude(Options, dgEditing)
  9. else
  10. Include(Options, dgEditing);
  11.  
  12. DBGrid1.Options := Options;
  13. end;
  14.  

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

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

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

#6

السلام عليكم

ماشاء الله .. بارك الله فيكم . شكرا جزيلا

.

.

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

عدد الاسطر قليل

321633277.gif

عند كثرة عدد الاسطر

283351767.gif

الاضافة المتسببة فى هدا المشكل هى

procedure TForm1.DBGrid1DrawColumnCell
if table1['N1']=0 then
tstringgrid(dbgrid1).RowHeights[datasource1.DataSet.RecNo-1]:=7;

بحيث يحدث هدا المشكل عندما يكثر عدد الاسطر اى عندما يفوق مجموع ارتفاع الاسطر ارتفاع DBGrid و الله اعلم .

فى غير دالك اى عندما يكون عدد الاسطر قليل يكون كل شىء تمام.

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

ثم عند كثرة عدد الاسطر مثلا 15..20 ينتج المشكل الوارد فى الصورة .

و السلام عليكم

شكرا مرة اخرى . :happy:

المرفق هنا

تم تعديل هذه المشاركة بواسطة hanitaieb في 23 أكتوبر 2008 في 01:47

#7

أخي الكريم يا ريت تحط المرفق في المندى أو على موقع غير الرابيد شير لأنه لا يعمل عندي :blush:

و يعون الله يكون للمشكلة حل

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#8

المرفق .

Nouveau_dossier.rar

تم تعديل هذه المشاركة بواسطة hanitaieb في 23 أكتوبر 2008 في 02:20

#9

أخي هاني

جربت المرفق و لم تظهر الرسالة التي ذكرتها

بكل الأحوال إن كان هناك مشكلة في dbgrid أنصحك بالتعامل مع stringgrid

مما فهمته في الإطار المرفق أنك تقوم بعمل ما يسمى ( كشف حساب ) العميل و تريد إخفاء السجلات التي قيمتها صفر

في حال رغبت في عمل ذلك بإستخدام dbgrid قم بعمل query على الجدول تستخرج منه العمليات التي تمت على العميل التي رصيدها لا يساوي 0

 
query.Active := false;
query.SQL.Clear;
query.SQL.Add('select * from order where name = ''hani'' and balance <> ''0''');
query.Active := true;

و قم بربط dbgrid بـ datasource المربوط بالـ query

الأمر مجرد إقتراح و إن كنت أخطأت الفهم أرجو منك توضيح ما هو مطلوب من الأطار بالتحديد

و إن كان الإقتراح قد أعجبك ممكن نتوسع في الشرح أكثر

أرجو الأستفادة

تم تعديل هذه المشاركة بواسطة rober في 23 أكتوبر 2008 في 04:16

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#10

السلام عليكم

اخى Rober

بالنسبة للاطار و مايحتويه :

و ضيفته الوحيدة هى للفصل بين العمليات فقط لاغير .

اما بالنسبة للصفر هو عبارة عن شرط للوصول الى دالك السطر

ل( تلوينه و تخفيض ارتفاعه و جعله غير مفعل ) لياخد صفة اطار.

و بالتالى ليس له اى علاقة بالعمليات المحاسبية الاخرى

------

فيما يخص رسالة الخطاء :

اخى Rober ادا كان لديك الوقت قم بمايلى :

تسجيل 3 اسطر عن طريق CheckBox .. اضافة سطرجديد (Append)

املىء تلك السطور باى شىء .

ثم ..

اضف سطرواحد عن طريق CheckBox .. الفصل بين العمليات

كرر هده العملية ليصل عدد الاسطر 20 او اكثر .. و ستضهر الرسالة

بارك الله فيك . :happy:

و السلام عليكم

تم تعديل هذه المشاركة بواسطة hanitaieb في 23 أكتوبر 2008 في 07:52

#11

أخ هاني

أتصور المشكلة في datasource1.DataSet.RecNo-1 في السطر

tstringgrid(dbgrid1).RowHeights[datasource1.DataSet.RecNo-1]:=7;

قد يقيدك أحد الأخوة الأكثر خبرة في حل المشكلة أو إضافة طريقة أخرى

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#12

السلام عليكم

وين وصلت اخي ؟؟ هل وجدت الحل ؟؟

إذا وصلت للحل أخبرنا رجاءا ...

بالتوفيق

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

#13

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

إليك المثال التالي :

نضع مركبة Table1ولتكن الداتا باز هي DBDemos والجدول هو Animals. ونضع مركبة DataSource1 و الـ DBGrid1.

ونربطهم عادي.

لنفترض أننا نريد إظهار الصفوف بإرتفاع ولون معين عند شرط معين وهو أن يكون الحقل Size يساوي 10.

فنكتب في الحدث OnDrawColumnCell في Table1 الكود التالي:

*********************************************************************

  1.  
  2. procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  3. DataCol: Integer; Column: TColumn; State: TGridDrawState);
  4. begin
  5. if Table1['Size']=10 then begin
  6. DBGrid1.Canvas.Font.Color:=clred;
  7. TStringGrid(DBGrid1).RowHeights[Table1.RecNo]:=10;
  8. end;
  9. DBGrid1.DefaultDrawColumnCell(rect,0,column,state);
  10. end;
  11.  

هذا ربما سيعطيك فكرة عما تريد بالنسبة لإمكانية الكتابة أو عدمها في بعض الأسطر.

تم تعديل هذه المشاركة بواسطة Swift في 28 أكتوبر 2008 في 21:15 — السبب: وضع التاج الخاص بالأكواد

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