ورود

View Full Version : نمایش تکراری اطلاعات در dbgrideh



khoshblagh
جمعه 28 خرداد 1395, 14:36 عصر
با سلام خدمت دوستان
من یک EhlibGridدارم که در رویداد قبل از چاپ کد زیر را نوشته ام . مشکل این کد این است که به هر بار دستور اجرا را صادر میکنم اطلاعات مورد نظر به اطلاعات قبلی اضافاه میشود.(به دلیل استفاده از دستور Append ) . جظور این را اصلاح کنم که با هر بار اجرا اطلاعات قبلی حذف و اطلاعات جدید جایگزین شود؟ متشکرم


procedure TfrmBimarKhas.prnBimarKhasBeforePrint(Sender: TObject);
begin
prnBimarKhas.AfterGridText.Create;
strText3:=
'رئیس رفاه و درمان'+': '+edtNamRisRefa.Text+#13+#13+
'مدیر امور کارکنان'+': '+edtNamModirRefa.Text+#13+#13+
'مدیر امورمالی'+': '+edtNamModirMali.Text+#13+#13+
'رئیس شورای درمان'+': '+edtNamRisShora.Text;
prnBimarKhas.AfterGridText.Append(strText3);
end;

یوسف زالی
جمعه 28 خرداد 1395, 14:59 عصر
سلام.


AfterGridText.Text := strText3;

رو امتحان کنید.

khoshblagh
جمعه 28 خرداد 1395, 18:25 عصر
خیر متاسفانه باز هم تکرار شد. در حقیقت هر بار باید حتما فرم را ببندم که این مشکل پیش نیاید. :گریه:

Mahmood_M
جمعه 28 خرداد 1395, 19:36 عصر
AfterGridText رو نباید Create کنید، باید قبل از نوشتن متن جدید اون رو Clear کنید
به این صورت بنویسید :


procedure TMainFrm.PrintDBGridEh1BeforePrint(Sender: TObject);
begin
PrintDBGridEh1.AfterGridText.Clear;

PrintDBGridEh1.AfterGridText.Add('رئیس رفاه و درمان'+' : ' + edtNamRisRefa.Text + #13 + #13);
PrintDBGridEh1.AfterGridText.Add('مدیر امور کارکنان'+' : ' + edtNamModirRefa.Text + #13 + #13);
PrintDBGridEh1.AfterGridText.Add('مدیر امورمالی'+' : ' + edtNamModirMali.Text+ #13 + #13);
PrintDBGridEh1.AfterGridText.Add('رئیس شورای درمان'+' : ' + edtNamRisShora.Text);
end;

khoshblagh
جمعه 28 خرداد 1395, 23:26 عصر
مشکل اینه که اگر دستور clear را اجرا کنم دیگر فونت و سایز قابل شناسایی نیست. برای جلوگیری از این موضوع در ادیتور AfterGridText من متغیری را معرفی میکنم و در همان جا هم فونت و سایز آن را هم معرفی میکنم. حال اگر اقدام به clear نمایم دیگر فونت و سایز قابل تعریف با کد نمی باشد. در حقیقت مشکل اصلی من همین تعریف فونت و سایز میباشد.

Mahmood_M
شنبه 29 خرداد 1395, 16:18 عصر
به جای Clear از Delete استفاده کنید :


procedure TMainFrm.PrintDBGridEh1BeforePrint(Sender: TObject);
var
S : String;
I, N : Integer;
begin
S := 'رئیس رفاه و درمان : ' + edtNamRisRefa.Text + #13 + #13
+ 'مدیر امور کارکنان : ' + edtNamModirRefa.Text + #13 + #13
+ 'مدیر امورمالی : ' + edtNamModirMali.Text + #13 + #13
+ 'رئیس شورای درمان : ' + edtNamRisShora.Text;

N := PrintDBGridEh1.AfterGridText.Count;
for I := 1 to N do
PrintDBGridEh1.AfterGridText.Delete(0);

PrintDBGridEh1.AfterGridText.Add(S);
end;