ورود

View Full Version : رنگ کردن سطر خاصی از dbgrid



elahe1364
دوشنبه 20 آبان 1387, 18:51 عصر
سلام دوستان
میدونم این سوال خیلی تکرار شده ولی من بازم مشکل دارم.
من یه dbgrid دارم که به یک adodataset وصل شده.
یه adoquery هم دارم که یه سری رکورد خاص از همون جدول داخلش فیلتر شده.
حالا من می خوام یه سطر های خاصی از dbgrid رنگی بشه.
مثلا اونهایی که داخل adoquery که گفتم وجود داره.
کد زیر رو نوشتم ولی فقط یه لحظه رنگی میکنه.

while not(DmTables.Query.Eof) do
begin
if((DBGrid1.DataSource.DataSet.FieldValues['ID'] )= DmTables.Query.FieldValues[ID'])Then
DBGrid1.Canvas.Brush.Color:=clInfoBK;
DmTables.Query.Next;
end;//ofwhile
DBGrid1.DefaultDrawColumnCell(Rect,DmTables.Query. RecordCount,Column, State);

accpascal
دوشنبه 20 آبان 1387, 19:06 عصر
دستور next باعث پیمایش کوئری می شود لذا برای همین است که grid فقط یک لحظه رنگی می شود
پیشنهاد می کنم رکوردهای کوئری را در یک مجموعه قرار بده و سپس دیتاست را با مجموعه مقایسه کن
البته با توجه به محدودیت مجموعه تعداد رکوردهای کوئری هم مهم می باشند

elahe1364
دوشنبه 20 آبان 1387, 21:00 عصر
با تشکر
ولی dbgrid من به یک dataset دیگه وصله. پیمایش روی query تاثیری روی این داره ؟

accpascal
دوشنبه 20 آبان 1387, 21:34 عصر
چون هرلحظه dataset مقادیر query را چک می کنه مسلما تاثیر داره
رنگ شدن dbgrid زمانیه که مقادیر کوئری چک می شه وقتی رکوردهای کوئری به پایان می رسه دیگه دیتاست مقدار برابر نداره

elahe1364
سه شنبه 21 آبان 1387, 22:01 عصر
ولی من نمیتونم از مجموعه ها استفاده کنم چون مقادیرم string هست
روش دیگه ای سراغ ندارید؟

accpascal
شنبه 25 آبان 1387, 22:13 عصر
ببخشید دیر شد با استفاده از این مثال به جواب می رسی. من امتحان کردم
دستور مطابق با فیلدهای خودت مانند مثال زیر در on draw columncels قرار بده
with query do
begin
active:=false;
sql.Clear;
sql.add('select id from custdb');
sql.add('where (id=:id)and(id in ');
sql.Add('(select id from citydb))');
parameters.ParamByName('id').Value:=DBGrid.DataSou rce.DataSet.fieldbyname('ID').Value;
open;
if recordcount>0 then DBGrid.Canvas.Brush.Color:=clred;
end;

accpascal
شنبه 25 آبان 1387, 22:16 عصر
خط زیر یادت نره
DBGrid.DefaultDrawColumnCell(Rect, DataCol, Column, State);

negarin5340
دوشنبه 18 آذر 1387, 11:15 صبح
سلام
من می خوام یک برنامه بنویسم برای یه شرکت که در کل اینکارو انجام می ده حدود 500 تیغه رو بایستی در جدولش درج کنیم بعد از درج این تیغه ها یه استعلام از مخابرات گرفته میشه و مخابرات یک سری از تیغه ها رو خراب اعلام میکنه و باید این خرابی تیغه ها رو در نرم افزار نیز مشخص کرد و من می خوام این کار رو کنم که تیغه های خراب با رنگ قرمز مشخص شه مثلا ردیف تیغه خراب رو انتخاب کم و بر روی یک buttonکلیک کنم و رنگ اون رکورد در dbgrid تغییر کنه ولی نمی دونم چی کار کنم اگه میشه منو دقیق راهنمایی کنید