نمایش نتایج 1 تا 33 از 33

نام تاپیک: SORT

  1. #1

    SORT

    سلام
    1- می خواهیم با کلیک بر روی هر ستون DBGRID اطلاعات بر اساس آن ستون مرتب شود
    2- بر ای ساخت ایندکس از داخل برنامه باید چکار کرد در ضمن فایل از نوع DBF است




  2. #2
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran-Tehran
    پست
    175
    سلام
    در مورد سوال 1 :
    باید در رویداد OnTitleClick از DBGrid کد زیر را بنویسید.
    به صورت صعودی :

    Table1.Sort := Column.FieldName +' ASC'

    به صورت نزولی :

    Table1.Sort := Column.FieldName +' DESC'

  3. #3
    سلام
    دوست عزیز دستور بالا را انجام دادم پیغام خطا می دهد
    Undeclared identifier: 'SORT'

  4. #4
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    بندرعباس ص پ 3769-79145
    پست
    149
    سلام
    ممکنه این راه حل نهایی نباشه!
    شما میتونید از یکی از این دو راه حل استفاده کنید:
    1- یک table داشته باشید که در قسمت OnTitleClick بنویسید:
    table1.indexfieldname:=Column.FieldName


    2- با استفاده از query اینکارو انجام بدید ( در همون رویداد ontitleclick‌)

  5. #5
    سلام
    برای سوال دوم باید چکار کرد

  6. #6
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran-Tehran
    پست
    175
    در این کد

    Table1.Sort := Column.FieldName +' ASC'

    منظور از Table1 نامی است که شما به Dataset یا جدول خود می دهید.
    شما احتمالا این نام را به DBGrid خود داده اید که تولید خطا می کند.

  7. #7
    سلام
    دوست عزیز TABLE چیزی به نام SORT نداره ویا اینکه من اونا پیدا نکردم می توانی بیشتر توضیح دهی ویا یک نمونه برنامه برایم ارسال کنی خیلی ممنون

  8. #8
    من یکبار این سوال رو کرده بودم البته من از ADO استفاده می کردم

    حالا هم یه سری به آدرس زیر بزن :!:

    http://delphi.about.com/b/a/027886.htm?PM=ss15_delphi

    هر چی درباره DBGrid در دلفی بخوای داره

  9. #9
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran-Tehran
    پست
    175
    نقل قول نوشته شده توسط شفیعی
    دوست عزیز TABLE چیزی به نام SORT نداره
    شما درست میگید.من منظورم ADOTable یا ADODataset بود.نه TTable.
    در link ای که Afshin_Zavar هم فرستاده از ADO استفاده شده.

  10. #10
    سلام
    در مورد ایندکس کسی از دوستان نظری ندارد

  11. #11
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran-Tehran
    پست
    175
    سلام
    برای ساختن Index از داخل برنامه می توانید از دستورات SQL استفاده کنید.
    این هم Syntax دستور CREATE INDEX
    http://www.simple-sw.com/sql-crndx.htm
    برای اجرای دستورات SQL هم از ADOCommand استفاده کنید.

  12. #12
    سلام
    من دستور بالا را به روش زیر انجام دادم پیغام خطا می دهد

    procedure TFreport.DBGrid1TitleClick(Column: TColumn);
    VAR S:STRING;
    begin
    S:='CREATE INDEX N ON "N_NAGHSH.DBF" N_naghsh ('+Column.FieldName+')';
    Freport.Caption :=S;
    Query1.Active:=FALSE;
    Query1.SQL.Clear;
    Query1.SQL.Add(S);
    Query1.Active:=TRUE;
    end;

    invalid use keyword token (Column.FieldName)


    برای اجرای دستورات SQL بجای استفاده از ADOCommand می خواهم از QUERY استفاده کنم

  13. #13
    سلام
    خسته نباشید
    برای سورت کردن از ADO استفاده کردم فقط 2 تا مشکل دارم
    اول اینکه چگونه در ADO از ALIAS استفاده می کنند
    دوم اینکه وقتی با ADO کار می کنیم اول برنامه یک USERNAME و پسورد می خواهد چگونه می توان این پنجره را غیر فعال نمود

  14. #14
    برای غیر فعال کردن اون پنجره Prompt.. ( پرومپت نمیدونم چی چی ) رو False کن . :mrgreen:

  15. #15
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran-Tehran
    پست
    175
    سلام
    همونطور که Gladiator اشاره کرد در ADOConnection (در صورت وجود) خاصیت Loginprompt رو False کن.

  16. #16
    سلام
    خیلی ممنون
    در مورد سوال اول باید چکار کرد :?:

  17. #17
    سلام
    از وقتی به جای TABLE از ADO استفاده کرده ام اطلاعات فارسی فایل قابل خواندن نمی باشد
    یعنی اطلاعات فارسی را درست نمایش نمی دهد :?:

  18. #18
    سلام
    منتظر جواب دوستان هستم

  19. #19
    کاربر دائمی آواتار MiRHaDi
    تاریخ عضویت
    تیر 1383
    محل زندگی
    تهران - سوهانک
    پست
    982
    سلام
    شفیعی جان ADO که کاری نداره Sort داره
    اگه هنوز با BDE کار میکنی از Query استفاده کنی بهتره
    اگه نمیخوای باید جدولت رو بگی برای همه فیلدها Index بسازه و از اونا استفاده کنی
    تو خود طراحی جدول باید بگی
    بای

  20. #20
    باسلام
    با کد نویسی هم خیلی راحت میشه index گذاری کرد.من این کار رو انجام دادم و بدون هیچ مشکلی کارکرد.متاسفانه نتونستم نمونه کدم را پیدا کنم .ولی میدونم از متد Addindex جدول استفاده کردم.

  21. #21
    سلام
    ببخشید همه دوستان می گویند راحت می توان این کار انجام داد من انجام دادم شد ولی کسی نمونه برنامه ای ارائه نمی کندبنده خیلی بیسواد هستم با این عبارات چیزی حالیم نمی شه
    اگر لحنه بندکمی تند است دوستان به بزرگوار خودشان بنده را عفو نمایند زیرا از دست این مشکل دیگر کلافه شده ام

  22. #22
    سلام فکر کنماین کد که توی SwissDelphiCenter.ch پیدا کردم بدردت بخوره. من اون را تست کردم و جواب گرفتم
    type
    TMoveSG = class(TCustomGrid); // reveals protected MoveRow procedure

    {...}

    procedure SortGridByCols(Grid: TStringGrid; ColOrder: array of Integer);
    var
    i, j: Integer;
    Sorted: Boolean;

    function Sort(Row1, Row2: Integer): Integer;
    var
    C: Integer;
    begin
    C := 0;
    Result := AnsiCompareStr(Grid.Cols[ColOrder[C&#9 3;][Row1], Grid.Cols[ColOrder[C]][Row2&#9 3;);
    if Result = 0 then
    begin
    Inc(C);
    while (C <= High(ColOrder)) and (Result = 0) do
    begin
    Result := AnsiCompareStr(Grid.Cols[ColOrder[C&#9 3;][Row1],
    Grid.Cols[ColOrder[C]][Row2&#9 3;);
    Inc(C);
    end;
    end;
    end;

    begin
    if SizeOf(ColOrder) div SizeOf(i) <> Grid.ColCount then Exit;

    for i := 0 to High(ColOrder) do
    if (ColOrder[i] < 0) or (ColOrder[i] >= Grid.ColCount) then Exit;

    j := 0;
    Sorted := False;
    repeat
    Inc(j);
    with Grid do
    for i := 0 to RowCount - 2 do
    if Sort(i, i + 1) > 0 then
    begin
    TMoveSG(Grid).MoveRow(i + 1, i);
    Sorted := False;
    end;
    until Sorted or (j = 1000);
    Grid.Repaint;
    end;

    به عنوان مثال :
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    { Sort rows based on the contents of two or more columns.
    Sorts first by column 1. If there are duplicate values
    in column 1, the next sort column is column 2 and so on...}
    SortGridByCols(StringGrid1, [1, 2, 0, 3, 4]);
    end;


    امیدوارم بدردت بخوره :wink:

  23. #23
    یه راه دیگه هم هست مخصوص DBGrid با استفاده از SQL به شرح زیر:
    توی رویداد ONCreate فرم میتونی خطوط زیر را بنویسی:
    QuerySql:='Select * From Custom.DB';
    Query1.Sql.add(querySql);
    query1.Open;

    حالا توی رویداد OnTitleClick مربوط به DBGrid کد زیر را بنویس:
    with query1 do
    begin
    disablecontrols;
    close;
    sql.clear;
    sql.add(querysql);
    sql.add('order by'+column.fieldname);
    open;
    dbgrid1.columns.restoredefaults;
    column.title.font.color:=clblue;
    enablecontrols;
    end;

  24. #24
    یک راه حل ساده استفاده از کامپوننت tms هست که با استفاده از html می تونی مرتب سازی انجام بدی

  25. #25
    کاربر دائمی آواتار esi022
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    علم چال
    پست
    338
    سلام شفیعی جان
    قبول دارم که با پیغامها ادم سخت به نتیجه میرسه - حالا مشکلت حل شد یا نه؟
    اگه نه پایم که مشکلت رو حل کنم.

    پیشنهادم اینه که اصلا ایندکس نسازی تو برنامه . استفاده از adoquery بهترین گزینه هست ( بنظر من ) .
    اگه از ado connection داری استفاده میکنی - از ado table , ado query استفاده کن
    و اینکه برای کنجکاوی خودم میپرسم!!!!:
    اطلاعاتتو چطوری فارسی ذخیره میکنی؟ unicode ؟ arabic ؟ خرچنگ غورباغه ؟
    :kaf:

  26. #26
    در رویداد title click گرید کد زیر را قرار بده
    (Column.Field.DataSet as TADOTable).IndexFieldNames:=Column.FieldName;
    در ضمن نیازی به هیچ کامپوننت دیگری نداری

  27. #27
    سلام
    اگر بخواهیم بعد از سورت کردن یک ICO و یا یک تصویر روی TITEL DBGRID نمایش دهیم باید چکار کرد که مشخص شود اطلاعات داخل DBGRID بر اساس این فیلد مرتب شده است باید چکار کرد

  28. #28
    کاربر دائمی آواتار MiRHaDi
    تاریخ عضویت
    تیر 1383
    محل زندگی
    تهران - سوهانک
    پست
    982
    سلام
    هندلش رو میگیری روش میکشی !
    نخواستی با Canvas میکشی
    نخواستی یک Image میذاری و جاش رو میذاری روی اون Title مورد نظر
    بازم نخواستی Title رو عوض میکنی و کاراکتری بهش اضافه میکنی مثلا Name /\
    راه زیاده شما میتونید از هر کدوم که میخواید استفاده کنید
    بای

  29. #29
    کاربر تازه وارد
    تاریخ عضویت
    آبان 1383
    پست
    77
    شما میتونین از cxgrid استفاده کنین خودش این کار رو می کنه

  30. #30
    من یک پیشنهاد دارم: برای فایل های DBF بهتره از Table های apollo استفاده کنی این apollotable به راحتی قابلیت index گذاری را به شما میدهد و هم اطلاعات فارسی را خراب نمی کنه با این componentها به راحتی میشه روی فایل های dbf کارکرد. من نمی دونم چطوری باید این component ها رو ضمیمه کنم اگر خواستید برایتون بفرستم . موفق باشید. :)

  31. #31
    سلام
    من می خواهم با کلیک بر روی هر ستون DBGRID اطلاعات بر اساس آن ستون sort شود ، همانطور که دوستان گفته بودند از ADOTable.Sort استفاده کردم به صورت زیر

        tbl_contract.Sort := column.FieldName +' ASC'

    ولی موقع اجرا خطای زیر را میگرد :cry:
    :Arguments are of the wrong type,are out of acceptable range, or are in conflict with one another
    کسی میتونه راهنماییم کنه

  32. #32
    کاربر دائمی آواتار Hamid_PaK
    تاریخ عضویت
    تیر 1384
    محل زندگی
    تهران
    پست
    1,125
    نمیدونم بدردتون می خوره یا نه ولی من با ADO Table اندکس ساختم بسیار ساده بود اینم یه مسال از TTable روش همونه . . .
    http://www.barnamenevis.org/viewtopic.php?t=29140

  33. #33
    ممنون از توجه تان :flower:
    tableمن هم از نوع ADO است.حالا امتحان میکنم ببینم جواب میده یا نه.

تاپیک های مشابه

  1. sort کردن عناصر در دیتاگرید در وب به C#‎
    نوشته شده توسط C#‎_web در بخش ASP.NET Web Forms
    پاسخ: 1
    آخرین پست: پنج شنبه 27 مهر 1385, 22:26 عصر
  2. مشکل در هنگام sort اطلاعات فارسی
    نوشته شده توسط aminkeshani در بخش SQL Server
    پاسخ: 4
    آخرین پست: چهارشنبه 26 مهر 1385, 00:27 صبح
  3. sort کردن
    نوشته شده توسط mahdieh_khatibi در بخش Access
    پاسخ: 4
    آخرین پست: سه شنبه 25 مرداد 1384, 19:55 عصر
  4. sort اطلاعات فارسی
    نوشته شده توسط parnian در بخش PHP
    پاسخ: 3
    آخرین پست: دوشنبه 26 بهمن 1383, 16:56 عصر
  5. Sort صحیح فارسی
    نوشته شده توسط Microsoft در بخش برنامه نویسی در Delphi
    پاسخ: 8
    آخرین پست: پنج شنبه 06 فروردین 1383, 11:51 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •