Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Скачок записей в DbGridEh при использование Bookmark [D7]


sergeyleroy ©   (2013-01-17 11:59:00) 

День добрый. Помогите пожалуйста.
Имеется следующий код:
function TGrafikLP.vcf_podschetSymmu(DataS: TADOQuery;
 Grid: TDBGridEH): string;
var
SavePlace:TbookMark;
sum: double;
i, kolznach: integer;
Begin

DataS.DisableControls;

try
SavePlace:= DataS.GetBookmark;
sum:= 0.0;
kolznach:=0;
case Grid.Selection.SelectionType of
   gstRectangle:
     begin
      DataS.Bookmark:= Grid.Selection.Rect.TopRow;
       while true do begin
        for i:= Grid.Selection.Rect.LeftCol to Grid.Selection.Rect.RightCol do begin
         if not DataS.Fields[i].IsNull then
          case DataS.Fields[i].DataType of
           ftSmallint, ftInteger, ftWord, ftFloat,
           ftCurrency, ftLargeint, ftBCD :
               Begin
               sum:=sum+DataS.Fields[i].AsFloat;
               kolznach:=kolznach+1;
               end;
          end; //case
        end;
        if Grid.Selection.Rect.BottomRow = DataS.Bookmark then break;
        DataS.Next;
       end; // while
     end;
 end;//case
 finally
  DataS.GotoBookmark(SavePlace);
  DataS.FreeBookmark(SavePlace);
  sum:=RoundTo(sum,-2);
 end; //try
DataS.EnableControls;

Result:='Количество: ' +FloatToStr(kolznach)+'   Сумма: '+ FloatToStrF(sum,ffNumber,10,2);

end;


Данный код выполняет суммирование данных в выделенных ячейках DbGridEH (3.6). Всё бы хорошо, Но когда выбираешь запись (диапазон) внизу или вверху таблицы - запись скачет к центру.
Скачок происходит при следующей выполнении кода:
   ...   DataS.Bookmark:= Grid.Selection.Rect.TopRow;
...
  DataS.GotoBookmark(SavePlace);...


Можно ли как нибудь решить проблему со скачком?


sergeyleroy   (2013-01-17 12:48:00) [1]

Долго думал, а только задал вопрос, сразу нашёлся ответ:)


sniknik   (2013-01-17 12:40:00) [2]

> sergeyleroy   (17.01.13 11:59)  
> sergeyleroy   (17.01.13 12:34) [1]
> Спустя несколько днейрешилось!!:)))
одолжи машину времени... очень надо!


sergeyleroy   (2013-01-17 12:34:00) [3]

Спустя несколько дней решилось!!:)))

function TGrafikLP.vcf_podschetSymmu(DataS: TADOQuery;
 Grid: TDBGridEH): string;
var
SavePlace:TbookMark;
sum: double;
i, kolznach: integer;
n: byte;
Begin

DataS.DisableControls;

try
 Grid.SaveBookmark;
 n:=0;
sum:= 0.0;
kolznach:=0;
case Grid.Selection.SelectionType of
   gstRectangle:
     begin
        If DataS.Bookmark= Grid.Selection.Rect.BottomRow then
        n:=1;
       while true do begin
        for i:= Grid.Selection.Rect.LeftCol to Grid.Selection.Rect.RightCol do begin
         if not DataS.Fields[i].IsNull then
          case DataS.Fields[i].DataType of
           ftSmallint, ftInteger, ftWord, ftFloat,
           ftCurrency, ftLargeint, ftBCD :
               Begin
               sum:=sum+DataS.Fields[i].AsFloat;
               kolznach:=kolznach+1;
               end;
          end; //case
        end;
        if ((Grid.Selection.Rect.BottomRow = DataS.Bookmark) and (n<>1)) or ((n=1) and (Grid.Selection.Rect.TopRow = DataS.Bookmark))  then break;
        If (n=1) then
          DataS.Prior
        else
          DataS.Next;
       end; // while
     end;
 end;//case
 finally

  Grid.RestoreBookmark;
  sum:=RoundTo(sum,-2);
 end; //try
DataS.EnableControls;

Result:='Количество: ' +FloatToStr(kolznach)+'   Сумма: '+ FloatToStrF(sum,ffNumber,10,2);

end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо