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.