<h3><%Producer.Write(''''我是 <#NameTag>'''')%></h3>
接 著 你 就 可 以 在 Producer 的 OnHTMLTag 事 件 中 取 代 這 個 Tag , 如 果 寫 入 的 資 料 不 是 HTML Tag 的 話 , 使 用 Response 會 較 有 效 率 。
13-10 Adapter
標 準 的 AdapterWrapper , 指 的 是 TAdapter 或 是 TDataSetAdapter 等 , 她 提 供 了 Fields,Actions 兩 個 列 舉 器 , 我 們 可 以 經 由 她 們 列 出 AdapterFields 及 AdapterActions:
<%
adlist=new Enumerator(Application.Fields)
s = ''''''''
for (; !adlist.atEnd(); adlist.moveNext())
{
s+=''''<h3>''''+adlist.item().Name+''''</h3>''''
}
Response.Write(s)
%>
<%
adlist=new Enumerator(Application.Actions)
s = ''''''''
for (; !adlist.atEnd(); adlist.moveNext())
{
s+=''''<h3>''''+adlist.item().Name+''''</h3>''''
}
Response.Write(s)
%>
當 一 個 網 頁 執 行 了 Action 後 發 生 錯 誤 導 向 錯 誤 網 頁 時 , 我 們 可 以 利 用 她 的 Errors 來 取 出 錯 誤 訊 息 :
<%
var e = new Enumerator(Modules.CountryTable.Adapter.Errors)
for (; !e.atEnd(); e.moveNext())
{
Response.Write("<li>" + e.item().Message)
}
e.moveFirst()
%>
當 使 用 的 Adapter 有 多 筆 資 料 時 , 例 如 TDataSetAdapter 跟 之 前 我 們 所 撰 寫 的 MyAdapter , 我 們 可 以 利 用 Records 列 舉 器 來 移 動 記 錄 位 置 :
<%var e = new Enumerator(vdsAdaptCust.Records)
for (; !e.atEnd(); e.moveNext())
{ %>
<tr>
<% if (vdsAdaptCust_Filter.Visible)
{ %>
<td><div><% obj=CheckBoxGroup(vdsAdaptCust_Filter, vdsAdaptCust_Filter.InputName,
1, '''''''')%><%=obj.text%></div></td><% } %>
你 可 以 在 AdapterGrid 中 所 產 生 的 Script 看 到 一 樣 的 運 用 方 式 , 當 你 把 AdapterGrid 的 AdapterMode 設 為 Edit 時 , 你 還 可 以 看 到 HiddenFields 及 HiddenRecordFields , 這 兩 個 Wrapper 可 以 將 Adapter 中 的 隱 藏 欄 位 用 WriteFields 寫 到 HTML 中 , 這 用 在 DataSetAdapter 上 , 你 可 以 在 AdaterAction 一 節 中 找 到 相 關 的 資 訊 , HiddenFields 及 HiddenRecordFields 中 的 資 訊 會 受 到 DataSetAdapterField 中 的 FieldFlags 特 性 值 的 影 響 , 就 像 是 以 往 我 們 熟 悉 的 UpdateFlag 一 樣 。 CanModify 及 CanView 則 是 權 限 控 制 的 部 份 , Mode 這 個 特 性 值 是 用 來 判 別 目 前 的 網 頁 所 處 的 狀 態 , 例 如 Edit,Insert,Query 等 DataSetAdapter 所 提 供 的 狀 態 , 技 術 上 你 可 以 用 撰 寫 元 件 的 方 式 定 義 自 己 的 AdapterMode 及 Adapter, 在 Inside WebSnap 中 有 一 個 這 樣 的 範 例 。
13-11 AdapterAction
AdapterAction 的 Wrapper Object , 我 們 可 以 在 Grid Page 中 的 Script 看 到 以 下 的 Script:
onclick="AdapterForm2.__act.value=''''<%=vAdapter1_Query.LinkToPage("Edit", "Error").AsFieldValue%>
這 會 編 出 以 下 的 HTML
__sp.4.Edit__fp.5.Error__id.19.Grid.Adapter1.Query
各 參 數 的 詳 細 用 途 請 參 考 AdapterAction 一 節 。 Style 特 性 值 與 AdapterAction 中 IGetHTMLStyle.GetDisplayType 相 呼 應 , 可 以 用 來 取 得 Action 的 顯 示 方 式 , 如 button,image,link 等 等 , Array 可 以 讓 我 們 列 出 該 Action 所 支 援 的 命 令 , 較 明 顯 的 範 例 是 PagedAdapter 的 GotoPage Script:
<%
// GotoPage has a list of commands. Loop through the list. Only use an anchor tag if the command
// is enabled
if (vGotoPage.Array != null)
{
var e = new Enumerator(vGotoPage.Array)
for (; !e.atEnd(); e.moveNext())
{
%>
<td>
<% if (vGotoPage.Enabled)
{ %>
<a href="<%=vGotoPage.LinkToPage(Page.Name).AsHREF%>">
<%=vGotoPage.DisplayLabel%></a>
<% }
else
{ %>
<a><%=vGotoPage.DisplayLabel%></a>
<% }
%>
</td>
<%
}
}
%>
13-12 AdapterField
我 想 你 對 她 應 該 相 當 熟 悉 了 , InputName 這 個 特 性 值 有 個 技 術 是 很 重 要 的 , 你 只 要 比 對 TDataSetAdapter 與 TAdapter 所 產 生 出 來 的 HTML 就 可 以 了 解 到 她 跟 Records 有 很 大 的 牽 連 , 在 AdapterGrid 情 況 下 InputName 後 面 的 數 字 代 表 著 資 料 記 錄 位 置 , 當 AdapterGrid Post 之 後 , 這 些 值 就 會 被 送 往 Action , 接 著 我 們 就 可 以 利 用 ActionRequest 與 ActionFieldValues 來 取 出 這 些 值 , InputStyle 則 是 HTML Control 類 型 , DisplayType 與 AdapterAction.Style 作 用 相 同 , 只 是 對 象 是 Text,Image,List , ViewMode 是 顯 示 模 式 : Input 與 Display , DisplayText 與 EditText 則 是 AdapterField 的 值 , 通 常 在 顯 示 text 時 我 們 使 用 DisplayText , input 時 使 用 EditText , ValuesList 則 是 傳 回 AdapterField 中 ValueList 的 Wrapper Object 。
13-13 AdapterErrors
就 是 Adapter 的 錯 誤 資 訊 , 也 就 是 我 們 在 Adapter Wrapper Object 所 展 示 的 列 舉 錯 誤 真 正 的 物 件 。
<%
var e = new Enumerator(Modules.CountryTable.Adapter.Errors)
for (; !e.atEnd(); e.moveNext())
{
Response.Write("<li>" + e.item().Message)
}
e.moveFirst()
%>
13-14 AdapterFieldValues
這 用 在 AdapterField 支 援 Multi-Value 時 , 如 HTML List Control 等 多 選 值 情 況 下 , 目 前 是 TAdapterMultiValueField 。 你 可 以 用 以 下 的 程 式 碼 來 取 出 這 些 值
var e = new Enumerator(f.Values.Records)
for (; !e.atEnd(); e.moveNext())
{
s+= ''''<li>''''
s += f.Values.ValueField.DisplayText;
s += ''''</li>''''
c++
}
e.moveFirst()
13-15 AdapterFieldValuesList
這 是 我 們 由 AdapterField.ValueList 所 傳 回 來 的 Wrapper Object , 使 用 方 式 大 略 與 上 面 那 一 個 相 同 , 不 過 多 加 了 可 傳 回 AdapterImage 的 能 力 與 直 接 用 Name 來 取 值 的 函 式 。
13-16 AdapterHiddenFields
就 是 我 們 使 用 Adapter.HiddenFields 所 傳 回 來 的 Wrapper 物 件 。
13-17 AdapterImage
使 用 AdapterField.Image 所 傳 回 來 的 Wrapper Object , 提 供 了 圖 形 的 URL 。
本章後記
WebSnap 中 的 Wrapper Object 大 概 就 是 這 些 , 我 本 來 不 想 將 這 些 列 出 來 的 , 因 為 這 些 東 西 在 更 新 的 Help 檔 中 有 詳 細 的 說 明 及 範 例 檔 , 只 是 有 部 份 蠻 模 糊 的 , 因 此 我 決 定 就 一 些 會 造 成 疑 問 的 部 份 說 明 , 請 你 參 照 著 On-Line Help 看 , 會 有 較 完 整 的 認 識 。
<附錄A、 一些小技巧>
上一页 [1] [2] [聊天工具]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)***
|