转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
Web Application 開 發 利 器 - WebSnap(十二)         ★★★★

Web Application 開 發 利 器 - WebSnap(十二)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1895 更新时间:2009/4/23 18:40:34

  Year,Month,Day:Word;

begin

  DecodeDate(AField.Value,Year,Month,Day);

  if Assigned(AYear.ActionValue) then

     Year:=AYear.ActionValue.Values[0];

  if Assigned(AMonth.ActionValue) then

     Month:=AMonth.ActionValue.Values[0];

  if Assigned(ADay.ActionValue) then

     Day:=ADay.ActionValue.Values[0];

  if (EncodeDate(Year,Month,Day) <> dsaOrders.DataSet.FieldByName(AField.FieldName).AsDateTime) then

     dsaOrders.DataSet.FieldByName(AField.FieldName).AsDateTime:=

               EncodeDate(Year,Month,Day);

end;

 

procedure TdmData.AdaptSaleDate_YearUpdateValue(Sender: TObject;

  Value: Variant);

begin

  UpdatePartDate(AdaptSaleDate,AdaptSaleDate_Year,AdaptSaleDate_Month,

                 AdaptSaleDate_Day);

end;

 

嘿 ! 我 沒 寫 錯 , 我 只 寫 了 一 個 AdaptSaleDate_Year.OnUpdateValue 函 式 , 那 這 樣 可 以 更 新 三 個 欄 位 嗎 ? 如 果 使 用 者 只 修 改 了 月 怎 麼 辦 ? 這 牽 扯 到 WebSnap 如 何 判 定 使 用 者 是 否 修 改 了 網 頁 中 的 資 料 , 其 實 很 簡 單 , 她 只 需 要 將 ActionValue 中 的 值 與 現 行 的 值 做 比 對 , 當 其 中 有 一 個 值 不 同 時 , 就 會 進 行 Update 的 動 作 , 這 也 就 是 說 當 網 頁 中 的 值 被 改 變 , 並 且 執 行 了 Apply Action 時 , WebSnap 會 進 行 現 行 值 與 ActionValue 的 比 對 動 作 , 當 有 一 個 值 不 同 時 , 就 進 行 Update 的 動 作 , 而 且 會 呼 叫 所 有 的 AdapterField 中 的 OnUpdateValue 事 件 , 這 也 是 我 為 何 可 以 只 寫 一 個 事 件 就 可 以 Update 3 個 欄 位 的 原 因 , 諸 如 此 類 的 小 陷 阱 在 WebSnap 中 到 處 都 是 , 懂 得 利 用 她 們 的 話 , 對 程 式 的 效 率 會 有 相 當 大 的 幫 助 。

  

12-2 Postback 技 術

 

接 下 來 我 們 將 介 紹 如 何 在 WebSnap 中 運 用 Postback 技 術 , 這 個 技 術 可 以 讓 我 們 處 理 Lookup Field 的 問 題 , 請 你 回 到 DELPHI IDE 中 , 加 入 兩 個 Table 及 一 個 DataSource 到 Web DataModule 中 , 並 設 定 她 們 的 TableName 分 別 為 Items( 訂 單 明 細 檔 ) 、 Employee( 員 工 檔 ) , 將 Items 與 Orders 設 定 為 Master-Detail 關 係 :

 

 

然 後 加 入 一 個 DataSetAdapter , 連 結 至 Items Table , 並 新 增 一 個 DataSetValueList 連 結 至 Employee Table , 並 將 她 的 NamedField 設 為 EmpNo: 

 

接 著 開 啟 dsaOrders 的 Fields Designer 加 入 一 個 AdapterField , 這 是 用 來 顯 示 員 工 名 稱 的 欄 位 :

 

 

然 後 選 擇 AdaptEmpNo 這 個 AdapterField , 將 她 的 ValueList 設 為 dsvlEmployee ( 員 工 資 料 的 DataSetValueList 元 件 ):

 

 

完 成 後 我 們 就 可 以 開 始 撰 寫 相 關 的 程 式 碼 , 我 們 必 須 加 入 一 個 私 有 變 數 到 這 個 Module 中 , 這 是 為 了 識 別 目 前 的 狀 態 是 否 為 Postback , 亦 或 是 一 般 情 況 :

 

private

    FIsPostBack:Boolean;

 

接 著 是 取 得 員 工 名 稱 的 AdaptEmpName.OnGetValue 事 件 :

 

procedure TdmData.AdaptEmpNameGetValue(Sender: TObject;

  var Value: Variant);

var

  LocateValue:Integer;

begin

  if not tbEmployee.Active then tbEmployee.Open;

  if Assigned(AdaptEmpNo.ActionValue) and FIsPostBack then

     LocateValue:=AdaptEmpNo.ActionValue.Values[0]

  else

     LocateValue:=AdaptEmpNo.Value;

  if tbEmployee.Locate(''''EmpNo'''',LocateValue,[]) then

     Value:=tbEmployee.FieldByName(''''LastName'''').AsString+'''' ''''+

             tbEmployee.FieldByName(''''FirstName'''').AsString

  else

     Value:='''''''';

end;

 

為 了 維 持 Postback 後 的 資 料 , 我 們 還 要 撰 寫 一 個 事 件 , 那 就 是 AdaptOrderNo.OnGetValue 事 件 :

 

procedure TdmData.AdaptOrderNoGetValue(Sender: TObject; Field: TField;

  var Value: Variant);

begin

  if Assigned(TDataSetAdapterField(Sender).ActionValue) and

     FIsPostBack then

     Value:=TDataSetAdapterField(Sender).ActionValue.Values[0]

  else

     Value:=Field.Value;

end;

 

將 這 個 事 件 設 定 給 AdaptCustNo,AdaptEmpNo,AdaptSaleDate,AdaptOrderNo 這 四 個 AdapterField:

 

 

最 後 開 啟 dsaOrders 的 Action Designer 加 入 一 個 AdapterAction , 並 撰 寫 相 關 的 程 式 碼 就 完 成 了 Postback 的 基 本 功 能 了 :

 

  

procedure TdmData.ActionPostBackExecute(Sender: TObject; Params: TStrings);

var

  vLocateParams:TLocateParams;

begin

  FIsPostBack:=True;

  vLocateParams:=dsaOrders.LocateParamsList.Add;

  vLocateParams.AdapterName:=dsaOrders.Name;

  vLocateParams.AddParam(''''OrderNo'''',AdaptOrderNo.ActionValue.Values[0]);

  dsaOrders.Locate;

end;

 

procedure TdmData.ActionPostBackAfterGetResponse(Sender: TObject;

  Params: TStrings);

begin

  FIsPostBack:=False;

end;

 

 請 開 啟 原 來 的 Edit Module , 重 新 設 計 網 頁 的 畫 面 , 將 LayoutGroup2.DisplayColumns 設 成 4 , 接 著 加 入 EmpNo 、 EmpName 這 兩 個 欄 位 , 將 EmpName 的 Caption 清 空 , 並 且 把 ViewMode 設 為 vmDisplay:

 

 

然 後 在 AdapterCommandGroup2 中 加 入 我 們 剛 剛 新 增 的 Postback Action:

 

 

接 著 把 她 的 DisplayType 特 性 設 成 ctAnchor , PageName 設 為 Edit:

 

 

完 成 後 請 切 到 HTML 這 一 頁 , 你 會 找 到 下 面 的 這 段 HTML 碼 , 將 她 複 製 起 來 :

 

 

回 到 Browser 頁 , 選 擇 LayoutGroup1 中 的 EmpNo 欄 位 , 將 上 面 那 段 碼 貼 到 Custom 特 性 值 中 , 將 onclick 改 成 onchange:

 

 

完 成 後 將 AdapterCommandGroup2 中 的 Postback Action 刪 除 掉 , 並 在 AdapterPageProducer 上 按 右 鍵 , 新 增 一 個 AdapterForm , 這 是 用 來 顯 示 明 細 資 料 用 的 , 在 她 之 中 新 增 一 個 AdapterGrid , 連 結 至 dsaItems ( 訂 單 明 細 檔 的 DataSetAdapter):

 

 

這 樣 就 完 成 了 Postback 的 技 術 了 , 執 行 畫 面 如 下 :

 

 

 

 

在 這 個 技 術 中 我 們 學 到 了 如 何 運 用 Custom 加 入 Client-Side Script , 並 且 利 用 她 來 完 成 我 們 的 Postback 技 術 , 這 個 技 術 相 當 有 趣 , 你 可 以 試 著 將 CustNo 也 改 成 同 樣 的 Select , 相 信 你 會 得 到 許 多 靈 感 !

 

 本 章 後 記

  Postback 技 術 在 撰 寫 資 料 庫 網 頁 中 是 很 重 要 的 , 幾 乎 是 不 可 缺 的 ,

上一页  [1] [2] [3]  下一页


[聊天工具]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)***
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台