PDA

View Full Version : عدم تغییر رنگ فوتنها در دی بی گرید در زمان تغییر داده ها



khoshblagh
جمعه 17 مهر 1394, 13:15 عصر
با سلام خدمت دوستان
من با کد زیر کلامات داخل دی بی گرید را با توجه به پارامترهای اطلاعات داده ها تغییر میدهم. لذا در زمان ساخت فرم رنگ مورد نظر تنظیم میشود. مشکل اینجاست که اگر بعد از باز شدن فرم مقادیر داده ها تغییر نماید ، رنگهای مورد نظر مجددا تنظیم نمیشود. یعنی حتما باید فرم بسته و باز شود تا رنگ مورد نظر تنظیم گردد. به نظر شما چکاری برای تنظیم رنگ در حین تغییر داده باید انجام داد؟ البته من سعی کردم که از متد رفرش گرید استفادم نمایم ، ولی تغییری حاصل نشد. متشکرم

procedure TfrmSabtKarkart.dbgGharardadDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumnEh;
State: TGridDrawState);
var
xValue : Variant;
begin
if gdSelected IN State then begin
if Column.Field.Value = Null then
xValue := ' '
else
xValue := Column.Field.Value;
dbgGharardad.Canvas.Brush.Color := clYellow ;
dbgGharardad.Canvas.FillRect(Rect);
dbgGharardad.Canvas.TextRect(Rect, Rect.Left, Rect.Top, xValue);
end;
if qryGharardad.FieldByName ('MahSal').Asstring =strMahSal
then
dbgGharardad.Canvas.Font.Color := clRed
Else
dbgGharardad.Canvas.Font.Color := clBlack;
dbgGharardad.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

hamedjim
جمعه 17 مهر 1394, 15:38 عصر
خیلی مطمئن نیستم. ولی از اون جایی که در حال یادگرفتنم، میشه این کد رو جایگزین سطر 16 کنی و نتیجه‌ش رو به من بگی؟



if TDBGrid(Sender).DataSource.DataSet.FieldByName('Ma hSal').AsString=strMahSal then

khoshblagh
جمعه 17 مهر 1394, 18:01 عصر
با سلام
تاثیری نداشت.

hamedjim
جمعه 17 مهر 1394, 18:40 عصر
من یه DBGrid و یک Edit روی یک فرم گذاشتم و شرط تغییر رنگ رو به این صورت گذاشتم که فیلد به‌خصوصی برابر با مقدار Edit بشه.
در رویداد OnChange مربوط به Edit هم فقط نوشتم DBGrid.Refresh
به محض اینکه مقدار تایپ شده در ادیت، برابر با یکی از مقادیر گرید میشد، رنگش تغییر می کرد

ابوالفضل عباسی
شنبه 18 مهر 1394, 15:25 عصر
به نظرم
اگر موقع زدن دیتای جدید باید رنگ عوض شود این فرمان هایی که نوشتی رو در onAfterPost یا onNewRecord یا onBeforeInsert بانک موردنظر بنویس یا باتوجه به نکاتی که دوستمون گفت اون هارو در onChange دی بی گرید بنویس که DBGrid.REfresh ولی شاید جواب نده.

khoshblagh
یک شنبه 19 مهر 1394, 08:44 صبح
با تشکر از دوستان
در حقیقت من میبایست کوئری مربوطه را بعد از تغییرات رفرش میکردم.

ابوالفضل عباسی
یک شنبه 19 مهر 1394, 13:10 عصر
خوشحالم مشکلت حل شد پس با فرمان refresh درست عمل کرد

khoshblagh
یک شنبه 19 مهر 1394, 18:07 عصر
با سلام
بله. متشکرم