delphi编写分页显示的模板



interface


uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ZcGridStyle, ZcCalcExpress, ZcFormulas, ZcUniClass, ZcBaseCtrls,
  ZJGrid, ZcDataGrid, ExtCtrls, StdCtrls, UntTimeEntry, UntProjectReport, kbase,
  UntIssues;


//分页
type
  TPagination = class
  private
    FPageCount: Integer; //页数
    FCurrentPage: Integer; //当前页码
    FPageSize: Integer; //每页记录数据


  public
    property PageCount: Integer read FPageCount write FPageCount;
    property CurrentPage: Integer read FCurrentPage write FCurrentPage;
    property PageSize: Integer read FPageSize write FPageSize;
  end;


type
  TfrmTimeDetail = class(TForm)
    pnl1: TPanel;
    pnl2: TPanel;
    EjunDataGrid1: TEjunDataGrid;
    lblFirst: TLabel;
    lblPrev: TLabel;
    lblNext: TLabel;
    lblLast: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure lblFirstClick(Sender: TObject);
    procedure lblPrevClick(Sender: TObject);
    procedure lblNextClick(Sender: TObject);
    procedure lblLastClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
    FTimeEntryList: TTimeEntryList;
    FIssueList: TIssueList;
    FPagination: TPagination;
    FProjectID: string;
    FAccessKey: string;
    procedure ShowProjectTimeEntries();
    //设置翻页按钮的状态
    procedure SetPageButtonState();
    //查询总记录数
    function GetTotalCount(key: string; ProjectID: string): Integer;
  public
    { Public declarations }
    property ProjectID: string read FProjectID write FProjectID;
    property AccessKey: string read FAccessKey write FAccessKey;
  end;


var
  frmTimeDetail: TfrmTimeDetail;


implementation


uses
  frmProject, Math;


const
  DETAIL_PROJECTNAME = 1;
  DETAIL_DATE = 2;
  DETAIL_USERNAME = 3;
  DETAIL_ACTION = 4;
  DETAIL_ISSUE = 5;
  DETAIL_COMMENT = 6;
  DETAIL_HOURS = 7;




    


{$R *.dfm}


{ TfrmTimeDetail }


procedure TfrmTimeDetail.ShowProjectTimeEntries;
var
  FilterExp: string;
  TotalCount, OffSet, i, idx: Integer;
  ATimeEntryItem: TTimeEntryItem;
begin
    //查询总记录数
  TotalCount := GetTotalCount(AccessKey, ProjectID);
  FPagination.PageCount := ceil(TotalCount / FPagination.PageSize);
  if FPagination.PageCount = 0 then
    FPagination.PageCount := 1;


    //查询记录
  OffSet := FPagination.PageSize * (FPagination.CurrentPage - 1);
  FilterExp := '&offset=' + IntToStr(OffSet);
//  FTimeEntryList.GetTimeEntries(AccessKey, ProjectID, FilterExp);
  FIssueList.GetIssues(AccessKey, ProjectID);
  EjunDataGrid1.BeginUpdate;
  try
    if EjunDataGrid1.Rows.Count > 1 then
    begin
      while EjunDataGrid1.Rows.Count > 1 do
        EjunDataGrid1.DeleteRow(EjunDataGrid1.Rows.Count - 1);
    end;
    EjunDataGrid1.InsertRow(1, FTimeEntryList.Count);
    for i := 0 to FTimeEntryList.Count - 1 do
    begin
      ATimeEntryItem := TTimeEntryItem(FTimeEntryList.Items[i]);
        //EjunDataGrid赋值
      EjunDataGrid1.Cells[DETAIL_PROJECTNAME, i + 1].AsString := ATimeEntryItem.ProjectName;
      EjunDataGrid1.Cells[DETAIL_DATE, i + 1].AsString := ATimeEntryItem.DetailDate;
      EjunDataGrid1.Cells[DETAIL_USERNAME, i + 1].AsString := ATimeEntryItem.DetailUsername;
      EjunDataGrid1.Cells[DETAIL_ACTION, i + 1].AsString := ATimeEntryItem.DetailAction;
      idx := FIssueList.IndexOfList(ATimeEntryItem.DetailIssueID);
      if idx > -1 then
        EjunDataGrid1.Cells[DETAIL_ISSUE, i + 1].AsString := FIssueList.Items[idx].IssueSubject;
      EjunDataGrid1.Cells[DETAIL_COMMENT, i + 1].AsString := ATimeEntryItem.DetailComment;
      EjunDataGrid1.Cells[DETAIL_HOURS, i + 1].AsFloat := ATimeEntryItem.DetailHours;
    end;
  finally
    EjunDataGrid1.EndUpdate();
  end;


    //设置翻页按钮状态
  SetPageButtonState;
end;


procedure TfrmTimeDetail.FormCreate(Sender: TObject);
begin
  FTimeEntryList := TTimeEntryList.Create;
  FIssueList := TIssueList.Create;
  FPagination := TPagination.Create;
  FPagination.PageSize := 25;
end;


procedure TfrmTimeDetail.FormDestroy(Sender: TObject);
begin
  if Assigned(FPagination) then
  begin
    FPagination.Free;
  end;
  FTimeEntryList.Free;
  FIssueList.Free;
end;


procedure TfrmTimeDetail.lblFirstClick(Sender: TObject);
begin
  FPagination.CurrentPage := 1;
  ShowProjectTimeEntries;
end;


procedure TfrmTimeDetail.lblPrevClick(Sender: TObject);
begin
  FPagination.CurrentPage := FPagination.CurrentPage - 1;
  ShowProjectTimeEntries;
end;


procedure TfrmTimeDetail.lblNextClick(Sender: TObject);
begin
  FPagination.CurrentPage := FPagination.CurrentPage + 1;
  ShowProjectTimeEntries;
end;


procedure TfrmTimeDetail.lblLastClick(Sender: TObject);
begin
  FPagination.CurrentPage := FPagination.PageCount;
  ShowProjectTimeEntries;
end;


function TfrmTimeDetail.GetTotalCount(key: string; ProjectID: string): Integer;
var
  mValue, retHtml: string;
  totalCount: Integer;
begin
  mValue := 'http://redmine.ig.com/redmine/time_entries.xml?key=' + key + '&project_id=' + ProjectID;


  retHtml := frmMCProject.GetRadmineValue(mValue, '');


  retHtml := xGet(retHtml, 'time_entries');
  if retHtml = '' then
  begin
    retHtml := frmMCProject.GetRadmineValue(mValue, '');
    retHtml := xGet(retHtml, 'time_entries');
  end;


  if retHtml = '' then
  begin
    ;//Raise Exception.Create('网络连接失败');
  end;


  totalCount := StrToIntDef(xGetAttrValue(retHtml, 'total_count'), 0);
  result := totalCount;
end;


procedure TfrmTimeDetail.SetPageButtonState;
begin
    //改变翻页按钮的状态
  if FPagination.CurrentPage <> 1 then
  begin
    lblFirst.Enabled := true;
    lblPrev.Enabled := true;
  end
  else
  begin
    lblFirst.Enabled := False;
    lblPrev.enabled := False;
  end;


  if FPagination.CurrentPage <> FPagination.PageCount then
  begin
    lblNext.Enabled := True;
    lblLast.Enabled := True;
  end
  else
  begin
    lblNext.Enabled := false;
    lblLast.Enabled := false;
  end;
end;


procedure TfrmTimeDetail.FormShow(Sender: TObject);
begin
  FPagination.CurrentPage := 1;
  ShowProjectTimeEntries();
end;


end.
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值