PDA

View Full Version : مرتب سازی بر اساس ستون در DBGrid



NOROOZY
شنبه 20 تیر 1383, 09:53 صبح
سلام
دوستان برای اینکه وقتی بر روی سر ستون یک ستون DBGrid کلیک میشه اطلاعات بر اساس آن ستون مرتب بشه چیکار باید کرد؟

JavanSoft
شنبه 20 تیر 1383, 11:19 صبح
چندین راه وجود دارد
1) یک Indexاز قبل برای ان آماده و بر اساس ایندکس اطلاعات را نمایش دهید
2) از Query+ OrderBy استفاده کنید
3) از CrDbGrid در مجموعه SDac استفاده کنید
:flower: :flower:

nasr
شنبه 20 تیر 1383, 11:36 صبح
ز CrDbGrid در مجموعه SDac استفاده کنید

این مجموعه را از کجا گیر بیاریم
ممنون

vcldeveloper
شنبه 20 تیر 1383, 12:12 عصر
procedure TformResult.gridResultTitleClick(Column: TColumn);
begin
// User can sort the grid by clicking on any column's title
if DM.ADOSearch.Sort = Column.FieldName + ' ASC' then
DM.ADOSearch.Sort := Column.FieldName + ' DESC'
else
DM.ADOSearch.Sort := Column.FieldName + ' ASC';
end;

NOROOZY
شنبه 20 تیر 1383, 12:44 عصر
آقای کشاورز اینه
خیلی ممنون

NOROOZY
شنبه 20 تیر 1383, 12:45 عصر
:تشویق: :kiss: (:D)

JavanSoft
شنبه 20 تیر 1383, 13:31 عصر
اینکه از کجا گیر بیاوریم جوابش مشخص است فروشگاه برنامه نویس

اما اینکه چرا من از SDAC اینقدر خوشم امده دلیلش اینست که در آن اینگونه عملیات ساده و پیش پا افتاده است
عملیاتی مانند جمع /شمارش / میانگین و ... غیره نیز علاوه بر ترتیب / جستجو و.... وجو د دارد

اما دلیل اصلی علاقه من یک مسئله جالب در ساختار پایگاهها در مورد LookUp فیلدها است که نه از سطح دلفی نه از SQL قابل حل نبود

اگر می خواهید این مشکل را ببینید 3 پایگاه را بصورت MAster/Detail تعریف کنید و سپس در پایگاه چهارم فیلدهای 3 پایگاه دیگر را بصورت LookUp بگیرید ...نتیجه عجیب است ...فقط فیلدهای یک پایگاه دیده می شود
سعی در حل مسئله کردم
در سایت Borland این مسئله بصورتی گذرا با تعریف سایزهای یکسان پیشنهاد حل شده بود که جواب نداد
در همین سایت در مورد فیلدهای LOOKUP در مورد در SQLServer سوال کردم که بعد متوجه شده چنین چیزی جز در مورد فیلدهای کلیدی تعریف نشده است

سپس به سراغ واسط یعنی SDAC رفتم و مشکل را شرکت Corlab در میان گذاشتم .... که راه حل جالبی در اختیارم گذاشتند و مشکلم حل شد.

سار
شنبه 20 تیر 1383, 15:07 عصر
procedure TformResult.gridResultTitleClick(Column: TColumn);
begin
// User can sort the grid by clicking on any column's title
if DM.ADOSearch.Sort = Column.FieldName + ' ASC' then
DM.ADOSearch.Sort := Column.FieldName + ' DESC'
else
DM.ADOSearch.Sort := Column.FieldName + ' ASC';
end;

میشه یکم در مورد این ADOSearch.Sort توضیح بدی که چه کامپوننتی هست؟

vcldeveloper
یک شنبه 21 تیر 1383, 01:08 صبح
میشه یکم در مورد این ADOSearch.Sort توضیح بدی که چه کامپوننتی هست؟

بابا ADOSearch یه ADOTable معمولیه و Sort هم یکی از خصوصیات ADOTable هست!
من چون اون کد رو از یکی از برنامه هام Copy/Paste کردم دیگه فرصت نشد اسمها رو عوض کنم! :wink:

مصطفی مختاری
یک شنبه 06 بهمن 1387, 10:48 صبح
procedure TformResult.gridResultTitleClick(Column: TColumn);
begin
// User can sort the grid by clicking on any column's title
if DM.ADOSearch.Sort = Column.FieldName + ' ASC' then
DM.ADOSearch.Sort := Column.FieldName + ' DESC'
else
DM.ADOSearch.Sort := Column.FieldName + ' ASC';
end;

جواب دادن به این موضوع شاید دیر باشه اما به نظرم بد نیست.
دوستانی که از این کد آقای کشاورز استفاده می نمایند دقت داشته باشند که
با چند تا شرط اولیه ، فیلد های Calculated و یا شماره ردیف را که در موقعیت های
OnCalcFields یا OnDrawColumnCell ایجاد کرده اند از مرتب شدن با این کد
استثنا نمایند تا برنامه دچار مشکل نشه.
مثلاً

if (Column.FieldName <> '')and (Column.FieldName <> 'CalculatedStatus') thenCalculatedStatus نام است.

Modernidea
پنج شنبه 17 بهمن 1387, 04:08 صبح
شرمنده همه ي اساتيد :خجالت:

آقا از كجا بفهميم كه روي كدوم ستون كليد شده. كه بر اساس اون ستون مرتب كنيم.

گشتم نبود نگردم نيستش :اشتباه:

SYNDROME
پنج شنبه 17 بهمن 1387, 06:15 صبح
شرمنده همه ي اساتيد :خجالت:

آقا از كجا بفهميم كه روي كدوم ستون كليد شده. كه بر اساس اون ستون مرتب كنيم.

گشتم نبود نگردم نيستش :اشتباه:
در TitleClick مربوط به DBGrid پارامتری وجود دارد به نام Column که اشاره به ستونی که بر روی آن کلیک کرده اید دارد.
در ضمن مثال آقای کشاورز گویا است.
موفق باشید

Mask
پنج شنبه 17 بهمن 1387, 08:54 صبح
دستور زیر کمکتون بکنه انشاء الله:

procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
if pos('dec' , NameTable Or quary.Sort )>0 then
begin
NameTable Or quary.Sort := 'dec';
end else begin
NameTable Or quary.Sort := Column.FieldName;
end;