2

どういうわけか、特定のページの結果の数を特定する方法がわかりません。データのリストと、PageSize1ページに収まる結果の数を識別するプロパティがあります。結果が120で、ページサイズが25であるとします。つまり、最初の4つは25レコード、5番目は20レコードの合計5ページになるはずです。現在、私が得ている結果は全面的にあります。たとえば、ある50はずのときに得られる可能性があります20

指定されたページの結果の数を返すためにこの関数を書いていますが、単純な数学を正しく理解できないようです(私は数学があまり得意ではありませんでした)。Countページごとに実際のリストはなく、そのページのレコード数を特定するために簡単に読み取ることができます。この関数を使用して、動的に計算する必要があります。

すぐ下のコード行を参照してくださいCALCULATION DONE HERE

function TMyData.SizeOfPage(const Index: Integer): Integer;
begin
  //Index = Page Number (0 ... MAX)
  //Result = Number of results in given page
  //PageCount = Total number of pages (from other function)
  //RecordCount = Total number of records (all pages)
  Result:= 0; //Default
  //Validate index bounds
  if (Index >= 0) and (Index < PageCount) then begin
    if Index < PageCount-1 then begin
      //Just return full size of one page
      Result:= PageSize;
    end else begin
      //Return number of records in the last page
      //--- CALCULATION DONE HERE ---
      Result:= RecordCount - Trunc(RecordCount / PageSize);
    end;
  end else begin
    raise Exception.Create('Page index out of bounds ('+IntToStr(Index)+')');
  end;
end;
4

1 に答える 1

4

ここで浮動小数点演算を使用する理由はありません。整数演算で十分な場合は、常に浮動小数点演算を避けます。

私は次のように書きます:

ItemsOnLastPage := 1 + (RecordCount-1) mod PageSize;

または、おそらくこのバージョン:

ItemsOnLastPage := RecordCount - (PageCount-1)*PageSize;

これは特に分かりやすいです。すべてのフル ページに表示されているレコードを差し引くと、最後のページのレコードが残ります。

限りPageCount、次のように計算できます。

PageCount := (RecordCount+PageSize-1) div PageSize;

@Rob の洞察に感謝します。

于 2012-12-17T18:11:32.797 に答える