دوستان سلام

در برنامه ای، یک DBGrid وجود داره که لیستی از هزینه ها رو نشون میده. DBGrid درحالت MultiSelection هست و کاربر با انتخاب چند سطر (درست مثل اکسل)، باید تعدا سطرها و مجموع ستون مبلغ رو مشاهده کنه.
برای انجام این کار، از کد زیر استفاده کردم و مشکلی وجود نداره:


Grid.DataSource.DataSet.DisableControls;
DSet:= Grid.DataSource.DataSet;
Sum:= 0;
for I := 0 to Grid.SelectedRows.Count - 1 do
begin
with DSet do
begin
Bookmark:= Grid.SelectedRows.Items[i];
TempBookMark:= DSet.GetBookmark;
GotoBookmark(TempBookmark);
Sum:= Sum + FieldByName('Price').AsInteger;
end;
Grid.DataSource.DataSet.FreeBookmark(TempBookMark) ;
end;
Grid.DataSource.DataSet.EnableControls;







اما مساله اینه که وقتی در DBGrid با ماوس یا کیبورد، در حالت انتخاب یا عدم انتخاب (افزایش و یا کاهش تعداد سطرهای انتخاب شده) هستم، موقعیت سطر فعلی به هم میریزه.
برای این مشکل، خواستم مجددا از بوک مارک استفاده کنم. یعنی قبل از اجرای تابع بالا، موقعیت رو بدست بیارم و بعد از تابع، به همون موقعیت برگردم. ولی موقعیت به تعداد سطر های انتخاب شده، پرش پیدا می کنه.
تابع بالا با یک شرط مناسب جهت جلوگیری از تکرار بی مورد، در رویداد DrawColumnCell قرار داره


لطفا می تونید به من بگید TBookMark، که یک آرایه هست، مقادیر رو از کجا و به صورت محاسبه و ثبت می کنه؟
یا شاید هم کلا روش من برای جمع لحظه ای فیلدهای انتخاب شده غلطه؟!