PDA

View Full Version : sort شدن ستون dbgrid با کلیک بر روی عنوان آن



MNosouhi
دوشنبه 18 مهر 1384, 22:49 عصر
با سلام
در یک برنامه که با dbisam نوشته شده و در حدود 20 Table در برنامه استفاده شده از جمله درخواست های مشتری این بوده که با کیک بر عنوان DbGrid ، ستون مربوطه Sort شود . حالا سوال من این است که به نظر شما از کدام روش برای این کار استفاده کنم:
1- برای همه فیلدهایی که در DbGrid نمایش داده می شوند که حدود 90 درصد از فیلدها چنین هستند ایندکس تعریف شود.
2- هر بار که روی عنوان ستونی کلیک شود با استفاده از دستور CreatIndex بر روی آن ستون اینکس ایجاد کرده و ایندکس قبلی را که به همین روش ایجاد شده پاک گردد.
3-با استفاده از دستورات Sql این کار رو انجام بدم که نیازی هم به تعریف ایندکس نباشه.
دوستان اگه لطف کنند نظات خودشون رو با دلیل توضیح بدن ممنون میشم.
اگه یه نفر از اساتید هر 3 مورد رو کاملا تحلیل کنه و معایب و مزایای هر کدوم رو توضیح بده که دیگه خیلی عالی میشه.

Kamyar.Kimiyabeigi
سه شنبه 19 مهر 1384, 07:59 صبح
اگر شما از ADO استفاده میکنین کد زیر در OntitleClick مشکلتونو حل میکنه


if Pos('ASC', ADOTable1.Sort) > 0 then
ADOTable1.Sort := Column.FieldName + ' DESC '
else
ADOTable1.Sort := Column.FieldName + ' ASC ';

MNosouhi
سه شنبه 19 مهر 1384, 22:08 عصر
دوست عزیز ، لطفا سوال رو کامل بخونید ، گفته ام که از DbIsam استفاده کرده ام. با Ado مشکلی ندارم.
به هر حال از لطف شما ممنون.

Kamyar.Kimiyabeigi
چهارشنبه 20 مهر 1384, 07:27 صبح
دوست عزیز ، لطفا سوال رو کامل بخونید ، گفته ام که از DbIsam استفاده کرده ام. با Ado مشکلی ندارم.
به هر حال از لطف شما ممنون.
دوست عزیز من نگفتم که شما با ADO مشکل دارین گفتم که اگه از ADO جهت وصل شدن به DbIsam استفاده میکنین راه حلش همون کدی که نوشتم

MNosouhi
چهارشنبه 20 مهر 1384, 22:27 عصر
دوست عزیز من نگفتم که شما با ADO مشکل دارین گفتم که اگه از ADO جهت وصل شدن به DbIsam استفاده میکنین راه حلش همون کدی که نوشتم
مگه میشه با Ado به DbIsam متصل شد؟میشه بیشتر توضیح بدین

babak869
شنبه 23 مهر 1384, 11:42 صبح
با سلام
در سایت DelphiAbout یه مثال هست که دقیقا اون چیزی رو که شما میخواید توضیح داده
اینجا رو ببین !!!
http://delphi.about.com/od/usedbvcl/l/aa042203a.htm
موفق باشید

MNosouhi
یک شنبه 24 مهر 1384, 05:14 صبح
اون که با Ado توضیح داده .

محسن شمس
یک شنبه 24 مهر 1384, 10:39 صبح
با BDE کسی بلد نیست Sort کنه

mzjahromi
یک شنبه 24 مهر 1384, 18:05 عصر
با BDE می تونی از این کد استفاده کنی(این کد رو تو OnTitle Click بذار


if Column.Field.FieldKind=fkData Then
Begin
TClientDataSet(Column.Field.DataSet).IndexFieldNam es:=Column.Field.FieldName;
Column.Title.Font.Style:=[FsBold];
End

البته اگه از ClientDataSet استفاده نمی کنی می تونی با یه پل از اون استفاده کنی ولی فکر کنم با بقیه dataSet ها هم جواب بده. در هرحال اگر هم جواب نده میتونی هر چی که هست اونو به ClientDataSet وصل کنی اینجوری می تونی Calculated fields هم روشون سورت داشته باشی ( البته نه CalcField هائی که تو ClientDataSet تعریف شدن

MNosouhi
یک شنبه 24 مهر 1384, 23:03 عصر
:عصبانی: آقای شمس اگه سوال دارید در یک تاپیک جدید مطرح کنید و موضوع تاپیک رو تغییر ندهید ، در اولین پست گفته ام که سوال من درباره DbIsam هستش.
در ضمن جالبه که یه نفر هم سوالم رو جواب نداده.

linspire
یک شنبه 24 مهر 1384, 23:16 عصر
با سلام
به وسلیه دستورات sql به راحتی متونید این کار رو انجام بدید
procedure TSearch.Search_grideTitleButtonClick(Sender: TObject;
AFieldName: String);
begin
if saodi then
begin
dm1.search.SQl[3]:='order by '+ AFieldName +' asc';
saodi:=false;
end
else
begin
dm1.search.SQl[3]:='order by '+ AFieldName +' desc';
saodi:=true;
end;
dm1.search.open;
end;
امیدوارم به دردتون بخوره
برای من که خوب جواب داده

MNosouhi
دوشنبه 25 مهر 1384, 23:25 عصر
این تابع شما درسته اما یه اشکال بزرگ داره که تو یه تاپیک دیگه هم درموردش سوال کردم ولی کسی نتونست جواب بده.وقتی شما در DbIsam برای سورت کردن از دستورات Sql استفاده کنی داده های جدیدی که وارد میکنی بصورت واقعی ذخیره نمیشن.کافیه یه بار جدولت را ببندی و دوباره باز کنی . میبینی که اطلاعاتی که بعد از سورت کردن وارد کرده ای ذخیره نشده.