function TMySessionPagedAdapter.AddToList(Value:string):Boolean;
begin
Result:=True;
if not FindSession(Value,foNothing) then
begin
if not FindSession('''''''',foNothing,Value) then
begin
try
VarArrayUnLock(FSessionVariant);
VarArrayRedim(FSessionVariant,FDeleteArraySize+1);
FDeleteArray:=VarArrayLock(FSessionVariant);
FDeleteArray[FDeleteArraySize+1]:=Value;
Inc(FDeleteArraySize);
except
Result:=False;
end;
end;
end;
end;
function TMySessionPagedAdapter.FindSession(Value:string;FindOperation:TFindOperation;AddValue:string=''''''''):Boolean;
var
I:Integer;
bFind:Boolean;
begin
bFind:=False;
if FDeleteArraySize <> -1 then
begin
for I:=0 to FDeleteArraySize do
begin
if (not VarIsEmpty(FDeleteArray[I])) and (Value = FDeleteArray[I]) then
begin
bFind:=True;
if FindOperation = foDelete then
FDeleteArray[I]:=Unassigned;
break;
end;
if (Value = '''''''') and (AddValue <> '''''''') and (VarIsEmpty(FDeleteArray[I])) then
begin
bFind:=True;
FDeleteArray[I]:=AddValue;
break;
end;
end;
end;
Result:=bFind;
end;
AddToList 及 FindSession 是 用 來 處 理 Session 的 程 式 , 我 們 利 用 了 一 個 Variant Array 來 儲 存 使 用 者 所 挑 選 的 檔 案 名 稱 , FDeleteArray 是 一 個 陣 列 指 標 , 我 們 在 操 作 Variant Array 之 前 會 先 使 用 VarArrayLock 來 加 快 處 理 Variant Array 的 速 度 .
procedure TMySessionPagedAdapter.WebPageModuleBeforeDispatchPage(
Sender: TObject; const PageName: String; var Handled: Boolean);
begin
InitializeList(AppPath+''''\*.*'''');
FSessionVariant:=Session.Values[''''DeleteList''''];
if VarIsEmpty(FSessionVariant) then
begin
FSessionVariant:=VarArrayCreate([0,0],varVariant);
FSessionVariant[0]:=Unassigned;
Session.Values[''''DeleteList'''']:=FSessionVariant;
FDeleteArraySize:=0;
end
else
FDeleteArraySize:=VarArrayHighBound(FSessionVariant,1);
FDeleteArray:=VarArrayLock(FSessionVariant);
end;
我 們 選 擇 了 在 BeforeDispatchPage 事 件 中 將 Session 取 出 並 Lock 後 對 應 至 FDeleteArray 中 。
procedure TMySessionPagedAdapter.WebPageModuleAfterDispatchPage(
Sender: TObject; const PageName: String);
begin
VarArrayUnLock(FSessionVariant);
Session.Values[''''DeleteList'''']:=FSessionVariant;
end;
在 Dispatch 之 後 我 們 將 Variant UnLock 後 存 回 Session 中 。
procedure TMySessionPagedAdapter.AdaptDeleteGetValue(Sender: TObject;
var Value: Boolean);
begin
Value:=FindSession(AdaptFileName.Value,foNothing);
end;
我 們 在 這 個 範 例 中 提 供 一 個 checkbox 在 每 一 筆 資 料 後 面 , 這 個 值 必 須 由 Session 中 取 出 。
procedure TMySessionPagedAdapter.AdaptDeleteUpdateValue(Sender: TObject;
Value: Boolean);
begin
AddToList(FStrings.Names[OrpEditablePagedAdapter1.CurrentUpdateIndex])
end;
當 使 用 者 選 定 檔 案 或 是 切 換 至 其 它 的 Page 時 , 我 們 要 執 行 Adapter 的 UpdateRecords 函 式 , 她 會 觸 發 AdapterField 的 UpdateValue 事 件 , 這 裡 我 們 使 用 了 TOrpEditablePagedAdapter 的 特 有 屬 性 :CurrentUpdateIndex , 這 個 屬 性 會 告 知 我 們 目 前 更 新 的 記 錄 位 置 , 我 們 再 由 FStrings 取 出 對 應 的 檔 名 .
procedure TMySessionPagedAdapter.ActionPrevPageBeforeExecute(
Sender: TObject; Params: TStrings; var Handled: Boolean);
var
I,iClearStart,iClearEnd:Integer;
begin
FSessionVariant:=Session.Values[''''DeleteList''''];
FDeleteArray:=VarArrayLock(FSessionVariant);
iClearStart:=OrpEditablePagedAdapter1.RecordIndex;
iClearEnd:=OrpEditablePagedAdapter1.PageSize +
OrpEditablePagedAdapter1.RecordIndex;
if iClearEnd > (FStrings.Count-1) then
iClearEnd:=FStrings.Count-1;
for I:=iClearStart to iClearEnd do
FindSession(FStrings.Names[I],foDelete);
OrpEditablePagedAdapter1.UpdateRecords((WebContext.AdapterRequest as IActionRequest));
VarArrayUnlock(FSessionVariant);
Session.Values[''''DeleteList'''']:=FSessionVariant;
end;
你 可 以 在 範 例 程 式 中 發 現 我 將 Goto , Prev , NextPage 三 個 Action 的 BeforeExecute 事 件 都 指 向 了 這 個 事 件 , 這 是 為 了 讓 使 用 者 操 作 方 便 , 不 需 要 再 按 另 一 個 按 紐 來 更 新 所 選 擇 的 檔 案 。
procedure TMySessionPagedAdapter.AdaptDeleteFileExecute(Sender: TObject;
Params: TStrings);
var
I:Integer;
begin
FSessionVariant:=Session.Values[''''DeleteList''''];
FDeleteArray:=VarArrayLock(FSessionVariant);
OrpEditablePagedAdapter1.UpdateRecords((WebContext.AdapterRequest as IActionRequest));
for I:=0 to FDeleteAr 上一页 [1] [2] [3] [4] 下一页 [聊天工具]Gmail推出新功能:Web Clip__天极Yesky [聊天工具]Web MSN你玩了吗__天极Yesky [系统软件]Web Browser Express 概述 [系统软件]对Internet Explorer Web 控件做一点修改 [常用软件]小技巧:三步实现Web迅雷录制PPLive节目 [常用软件]天网防火墙:打开WEB和FTP服务 [VB.NET程序]使用VB.Net做一个配置web.config功能的WinForm(原… [VB.NET程序]vb.net控件、web service简述 [VB.NET程序]使用vbscript脚本调用web服务 [VB.NET程序]*** Web 存储系统窗体:窗体注册表 (new)***
|