PDA

View Full Version : سوال: Sort کردن یک فیلد بر اساس فیلد دیگر



hamedjim
سه شنبه 05 خرداد 1394, 00:13 صبح
سلام به همگی.
دوستان در ADO جدولی دارم که ستون هایی از اون رو در DBGrid نشون میدم. دو تا از ستون ها مربوط به مدت زمان هستند. در واقع یکی از اونها زمان رو بر حسب ثانیه (Field5) نشون میده و اون یکی بر حسب روز، ساعت، دقیقه، ثانیه (Field4).




Field4 Field5
-----------------------
3h 5m 2s 11102
7m 24s 444
2D 1s 86401
1s 1



اما من فیلد مربوط به زمان بر حسب ثانیه (Field5) رو در DBGrid نشون نمیدم.
در سورت کردن فیلدها با کلیک روی Title مشکلی ندارم. اما میخوام وقتی کاربر روی Field4 کلیک کرد، جدول بر حسب Field5 سورت بشه. امیدوارم تونسته باشم منظورم رو بفهمونم و البته راه حلی هم برای این سوال من پیدا بشه.
ممنون از توجهتون

pezhvakco
سه شنبه 05 خرداد 1394, 09:44 صبح
در سورت کردن فیلدها با کلیک روی Title مشکلی ندارم. اما میخوام وقتی کاربر روی Field4 کلیک کرد، جدول بر حسب Field5 سورت بشه.
در همین بخش نام اون ستون رو بنویسید

ADOTable1.IndexFieldNames := 'Filed5';

hamedjim
سه شنبه 05 خرداد 1394, 09:59 صبح
ADOTable1.IndexFieldNames := 'Filed5';


امکانش هست کد مشابه‌ش رو برای ADOQuery هم بنویسید؟

pezhvakco
سه شنبه 05 خرداد 1394, 11:52 صبح
پیشنهاد من به شما به کار بردن
ADODataSet
به جای
ADOQuery
است که ابزار و کارایی بیشتر و بهتری داره .

hamedjim
سه شنبه 05 خرداد 1394, 12:31 عصر
PezhvakCo عزیز، ممنون.
البته حق با شماست. کوتاهی از من بود که حوصله تغییر دادن برنامه رو نداشتم.
با این حال با توضیح قبلی که دادی این کد رو نوشتم که منو به چیزی که می‌خواستم رسوند:



procedure TFormMain.DBGridDBTitleClick(Column: TColumn);
var
S: String;
FName: String;
begin
S:= ADOQueryDB.Sort;
FName:= Column.FieldName;
if FName='Field4' then
FName:='Field5';

if Pos('ASC',S) > 0 then
ADOQueryDB.Sort := FName + ' DESC'
else
ADOQueryDB.Sort := FName + ' ASC';

end;