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

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

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

Web Application 開 發 利 器 - WebSnap!

第 十 二 章 、 DateTime 欄 位 的 拆 解 與 LookupField 、 Postback 技 術 

  在 撰 寫 資 料 庫 程 式 中 , 我 們 常 常 需 要 用 到 Lookup Field , 例 如 當 使 用 者 選 取 了 某 一 個 客 戶 後 , 帶 出 該 客 戶 的 公 司 名 稱 , 這 在 一 般 的 Windows 程 式 中 並 不 困 難 , 但 如 今 我 們 是 身 在 Web Application 中 , 需 要 考 慮 的 問 題 與 技 術 因 為 Web 的 運 作 方 式 不 同 , 使 用 的 方 法 也 就 不 同 , 首 先 是 Lookup ComboBox 的 顯 示 方 式 , 也 就 是 業 界 俗 稱 的 開 窗 動 作 , 在 Web Application 中 我 們 可 以 使 用 兩 種 方 式 達 到 同 樣 的 效 果 , 一 是 直 接 將 內 容 顯 示 於 ComboBox(Select) 中 , 另 一 種 就 是 開 一 個 新 瀏 覽 視 窗 , 兩 種 都 有 一 些 優 點 及 缺 點 , 直 接 將 內 容 顯 示 於 ComboBox 中 我 們 必 須 面 臨 一 個 抉 擇 , 是 要 將 資 料 全 部 下 載 至 Client 端 , 然 後 以 HTML+Script 方 式 處 理 , 還 是 等 使 用 者 選 擇 了 某 一 個 客 戶 後 , 讓 網 頁 重 新 讀 取 一 次 , 藉 由 這 個 機 會 我 們 再 將 Lookup 的 資 料 填 入 返 回 的 HTML 中 , 這 就 是 Postback 技 術 , 第 一 種 方 式 必 須 視 資 料 量 的 大 小 而 定 , 如 果 資 料 量 太 大 , 這 樣 的 處 理 可 是 很 費 時 的 , 優 點 是 一 旦 傳 輸 完 畢 後 , 使 用 者 可 以 用 較 快 的 速 度 選 取 資 料 , Postback 則 是 只 傳 送 必 要 的 資 料 , 例 如 客 戶 編 號 , 待 使 用 者 選 取 了 某 個 客 戶 編 號 後 Postback 至 WebServer , 這 時 我 們 可 以 取 得 使 用 者 所 選 擇 的 客 戶 編 號 , 進 而 取 得 Lookup 的 資 料 , 最 後 將 資 料 與 網 頁 整 合 後 傳 回 給 使 用 者 , 這 種 方 式 的 缺 點 是 你 必 須 要 自 行 處 理 這 之 間 的 動 作 , 因 為 目 前 的 WebSnap 並 未 明 白 支 援 Postback , 優 點 是 你 的 資 料 獲 得 較 多 的 保 護 , 使 用 者 能 看 到 的 只 是 編 號 而 已 , 同 時 速 度 上 也 比 之 前 的 方 法 有 效 率 , 在 這 裡 我 使 用 Postback 技 術 , 這 對 你 來 說 較 實 際 一 點 。 

除 了 Lookup 的 問 題 外 , 我 們 還 有 另 一 個 問 題 , 那 就 是 日 期 輸 入 的 問 題 , 其 實 這 個 問 題 並 不 是 很 重 要 , 因 為 你 只 需 要 提 示 輸 入 的 範 例 , 讓 使 用 者 了 解 你 的 網 頁 所 需 要 的 正 確 日 期 與 時 間 格 式 即 可 , 但 是 將 一 個 日 期 拆 解 為 三 個 欄 位 來 輸 入 的 技 術 卻 能 夠 開 啟 你 另 一 扇 運 用 WebSnap 的 窗 , 因 此 我 將 與 你 討 論 這 個 技 術 。 

 

12-1 一 變 三 , DateTime 欄 位 拆 解 

  在 開 始 撰 寫 程 式 之 前 , 我 們 先 想 想 , 要 如 何 才 能 將 一 個 DateTime 的 AdapterField 拆 解 為 三 個 欄 位 ? 首 先 我 們 必 須 要 建 立 三 個 虛 擬 的 AdapterField , 用 來 儲 存 拆 解 後 的 年 、 月 、 日 三 個 值 , 接 著 取 代 原 來 的 DateTime 欄 位 顯 示 於 網 頁 上 , 當 使 用 者 編 修 這 三 個 欄 位 之 後 , 我 們 必 須 將 這 三 個 欄 位 組 合 後 存 回 原 來 的 AdapterField 中 , 亦 或 是 直 接 存 回 資 料 庫 之 中 , 上 面 的 流 程 中 我 們 有 幾 個 關 鍵 必 須 要 先 解 決 , 我 們 在 那 個 事 件 中 將 原 來 的 DateTime 資 料 解 出 , 並 存 放 到 這 三 個 虛 擬 AdapterField 之 中 ? 又 在 那 個 事 件 中 將 這 些 值 存 回 資 料 庫 中 ? 第 一 個 問 題 相 信 你 大 慨 有 點 譜 了 , 就 是 OnGetValue 事 件 , 我 們 可 以 在 虛 擬 欄 位 中 的 OnGetValue 事 件 將 值 取 出 , 並 傳 回 給 WebSnap 顯 示 在 網 頁 上 , 我 們 先 解 決 這 個 問 題 , 第 一 步 當 然 是 將 這 三 個 虛 擬 AdapterField 加 到 dsaOrders 這 個 DataSetAdapter 中 : 

 

接 著 撰 寫 她 們 的 OnGetValue 事 件 程 式 , 因 為 我 們 會 常 用 到 解 出 年 、 月 、 日 的 程 式 碼 , 因 此 我 們 將 她 寫 成 函 式 , 方 便 使 用 :

 

TExtractDateTo=(extYear,extMonth,extDay);

TdmData = class(TWebDataModule)

… … … … … … … … … … …

private

    procedure ExtractDateToAdapterField(var Value:Variant;

                                        AFullValue:Variant;ExtOption:TExtractDateTo);

… … … … … … … … … … …

procedure TdmData.ExtractDateToAdapterField(var Value:Variant;

                                        AFullValue:Variant;ExtOption:TExtractDateTo);

var

  vYear,vMonth,vDay:Word;

begin

  DecodeDate(AFullValue,vYear,vMonth,vDay);

  case ExtOption of

      extYear: Value:=vYear;

      extMonth: Value:=vMonth;

      extDay: Value:=vDay;

  end;

end;

 

procedure TdmData.AdaptSaleDate_YearGetValue(Sender: TObject;

  var Value: Variant);

begin

  ExtractDateToAdapterField(Value,AdaptSaleDate.Value,extYear);

end;

 

procedure TdmData.AdaptSaleDate_MonthGetValue(Sender: TObject;

  var Value: Variant);

begin

  ExtractDateToAdapterField(Value,AdaptSaleDate.Value,extMonth);

end;

 

procedure TdmData.AdaptSaleDate_DayGetValue(Sender: TObject;

  var Value: Variant);

begin

  ExtractDateToAdapterField(Value,AdaptSaleDate.Value,extDay);

end;

 

完 成 後 我 們 就 開 始 設 計 編 修 資 料 的 網 頁 , 請 在 專 案 中 新 增 一 個 Page Module , 將 她 命 名 為 Edit , 接 著 當 然 是 uses dmData 與 Home 這 兩 個 Module , 並 將 標 題 圖 形 與 導 覽 列 加 入 , 再 開 啟 Visual Page Designer , 這 裡 我 們 照 樣 加 入 兩 個 AdapterForm , 一 個 是 顯 示 標 題 圖 形 與 導 覽 列 , 另 一 個 則 是 讓 使 用 者 編 修 資 料 用 , 這 裡 我 們 使 用 LayoutGroup 來 編 排 網 頁 , 因 此 請 在 AdapterForm2 中 加 入 一 個 AdapterFieldGroup , 並 將 她 的 Adapter 設 為 dmData.dsaOrders , 與 設 定 Custom 特 性 為 border= ” 1 ” , 這 會 讓 這 個 FieldGroup 擁 有 單 框 的 顯 示 樣 式 : 

 

在 AdapterFieldGroup2 下 新 增 一 個 LayoutGroup , 並 在 他 上 方 按 右 鍵 選 擇 Add Columns , 並 加 入 OrderNo 及 CustNo 兩 個 欄 位 。

 

 

我 們 也 可 以 利 用 LayoutGroup 的 DisplayColumns 特 性 值 來 控 制 這 些 Field 的 排 列 方 式 , 請 將 她 設 為 2.

 

 

接 著 我 們 在 AdapterFieldGroup2 中 加 入 第 二 個 LayoutGroup , 將 我 們 的 虛 擬 AdapterField 加 入 :

 

 

完 成 後 你 會 看 到 這 個 不 太 令 人 滿 意 的 排 列 :

 

 

這 可 以 利 用 LayoutGroup 的 DisplayColumns 來 解 決 , 請 將 LayoutGroup2 的 DisplayColumns 設 為 3 。

 

 

接 著 設 定 這 三 個 Field 的 DisplayWidth 、 MaxLength 、 Caption 特 性 值 。

 

 

上 圖 中 我 們 將 年 這 個 Field 的 Caption 設 為 SaleDate , 且 將 DisplayWidth 與 MaxLength 都 設 為 4 , 這 可 以 控 制 使 用 者 可 輸 入 的 字 串 長 度 , 接 著 將 月 日 這 兩 個 Field 的 Caption 清 空 , 並 設 定 DisplayWidth 、 MaxLength 為 2 。

 

  

接 著 加 入 一 個 AdapterCommandGroup 到 AdapterForm2 中 , 把 她 的 DisplayComponents 特 性 值 設 為 AdapterFieldGroup2 , 並 且 加 入 Apply 、 Cancel 這 兩 個 Action 。

 

 

OK! 這 樣 就 算 是 完 成 編 修 資 料 的 網 頁 了 , 接 著 我 們 要 回 到 Grid Module 中 , 在 每 一 筆 資 料 的 最 後 加 入 一 個 Edit Action , 讓 使 用 者 可 以 經 由 這 個 Action 到 達 編 修 資 料 的 網 頁 。

 

 

我 使 用 了 Hyperlink 的 方 式 來 顯 示 這 個 Edit Action , 你 可 以 經 由 設 定 cmdEditRow 的 DisplayType 來 調 整 顯 示 Action 的 樣 式 , 除 了 這 個 特 性 之 外 , 我 們 還 要 設 定 她 的 PageName 特 性 為 Edit , 這 樣 就 可 以 在 使 用 者 點 選 這 個 Action 後 導 向 我 們 的 編 修 網 頁 .

 

 

不 錯 吧 , 我 們 成 功 的 將 一 個 欄 位 拆 解 成 三 個 欄 位 來 顯 示 了 , 這 很 有 用 不 是 嗎 ? 相 信 你 一 定 會 從 這 個 範 例 中 得 到 許 多 其 它 的 運 用 , 而 不 只 侷 限 在 日 期 輸 入 之 中 。 接 下 來 我 們 繼 續 處 理 編 修 後 的 儲 存 動 作 , 我 們 可 以 在 這 些 虛 擬 的 AdapterField 的 OnUpdateValue 事 件 中 處 理 這 個 問 題 :

 

private

  … … … … … … …

  procedure UpdatePartDate(AField:TDataSetAdapterField;AYear,AMonth,ADay:TAdapterField);

 

… … … … … … … … …

 

procedure TdmData.UpdatePartDate(AField:TDataSetAdapterField;AYear,AMonth,ADay:TAdapterField);

var

[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……
    咸宁网络警察报警平台