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

نام تاپیک: sort dbgrid

  1. #1

    Question sort dbgrid

    سلام به همه دوستان
    من برای sort dbgrid در برنامه یک تابع دارم که در ontitleclick هر کدام از grid ها فراخوانی می کنم و از دستور order by در sql و یا dataset نمی خواهم استفاده کنم . تا حالا مشکلی نداشتم الان که در dll قرارش دادم دچار مشکل شدم . ایا دوستان می تونند کد رو به گونه ای تغییر بدهند که در dll قابل استفاده باشد .
    procedure Sort_Grid(Column: TColumn);
    var
    andstr:string;
    i:integer;
    begin
    try
    if Column.Field.FieldKind<>fkData then exit;
    andstr:='';
    if (Column.Field.DataSet.ClassNameIs ('tadoquery')=true) then
    begin
    if tadoquery(Column.Field.DataSet ).sort='' then
    andstr:=''
    else
    andstr:=',';
    if KeyDataToShiftState(1)=[ssctrl] then
    begin
    tadoquery(Column.Field.DataSet ).sort:=tadoquery(Column.Field.DataSet ).sort+andstr+Column.FieldName;
    Column.Title.Font.Color:=clyellow;
    end;
    if KeyDataToShiftState(1)=[] then
    begin
    for i:=0 to TDBGrid(Column.Grid ).Columns.Count-1 do
    TDBGrid(Column.Grid ).Columns[i].Title.Font.Color:=clWhite;
    Column.Title.Font.Color:=clyellow;
    tadoquery(Column.Field.DataSet ).sort:=Column.FieldName;
    end;
    if KeyDataToShiftState(1)=[ssctrl,ssshift] then
    begin
    tadoquery(Column.Field.DataSet ).sort:= tadoquery(Column.Field.DataSet ).sort+andstr+Column.FieldName+' DESC';
    Column.Title.Font.Color:=$000A71FC;
    end;
    if KeyDataToShiftState(1)=[ssshift] then
    begin
    for i:=0 to TDBGrid(Column.Grid ).Columns.Count-1 do
    (Column.Grid as TDBGrid).Columns[i].Title.Font.Color:=clWhite;
    Column.Title.Font.Color:=$001D9DE2;
    tadoquery(Column.Field.DataSet).sort:=Column.Field Name+' DESC';
    end;
    end;
    if KeyDataToShiftState(1)=[ssctrl] then
    except on e:exception do
    ShowMessage (e.Message );
    end;
    end;

  2. #2

    نقل قول: sort dbgrid

    الان که در dll قرارش دادم دچار مشکل شدم
    چه مشکلی پیش میاد ؟ آیا DLL کامپایل میشه یا در زمان کامپایل مشکل پیش میاد ؟
    شاید مشکل از نحوه ی تعریف تابع و یا فراخوانی اون باشه ...

    به هر حال جواب به این سئوال نیازمند توضیح بیشتری هست ...

    ...

  3. #3

    نقل قول: sort dbgrid

    با تشکر از شما دوست عزیز
    مشکل این بود که در زمان فراخوانی هیچ عملی را انجام نمی داد . من نمی خواستم به ورودی تابع چیزی اضافه کنم اما در نهایت با اضافه کردن grid در ورودی و تغیر ان به صورت زیر مشکل حل شد .
    procedure Sort_Grid(Column: TColumn;grid:tsmdbgrid);stdcall;
    var
    andstr:string;
    i:integer;
    begin
    try
    if Column.Field.FieldKind<>fkData then exit;
    andstr:='';
    if (Column.Field.DataSet.ClassNameIs ('tadoquery')=true) then
    begin
    if tadoquery(Column.Field.DataSet ).sort='' then
    andstr:=''
    else
    andstr:=',';
    if KeyDataToShiftState(1)=[ssctrl] then
    begin
    tadoquery(Column.Field.DataSet ).sort:=tadoquery(Column.Field.DataSet ).sort+andstr+Column.FieldName;
    Column.Title.Font.Color:=clyellow;
    end;
    if KeyDataToShiftState(1)=[] then
    begin
    for i:=0 to grid.Columns.Count -1 do
    grid.Columns[i].Title.Font.Color:=clWhite;
    Column.Title.Font.Color:=clyellow;
    tadoquery(Column.Field.DataSet ).sort:=Column.FieldName;
    end;
    if KeyDataToShiftState(1)=[ssctrl,ssshift] then
    begin
    tadoquery(Column.Field.DataSet ).sort:= tadoquery(Column.Field.DataSet ).sort+andstr+Column.FieldName+' DESC';
    Column.Title.Font.Color:=$000A71FC;
    end;
    if KeyDataToShiftState(1)=[ssshift] then
    begin
    for i:=0 to grid.Columns.Count-1 do
    grid.Columns[i].Title.Font.Color:=clWhite;
    Column.Title.Font.Color:=$001D9DE2;
    tadoquery(Column.Field.DataSet).sort:=Column.Field Name+' DESC';
    end;
    end;
    if KeyDataToShiftState(1)=[ssctrl] then
    except on e:exception do
    ShowMessage (e.Message );
    end;
    end;

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

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