亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > HTML > 正文

HTML中的數據綁定

2020-10-23 18:52:54
字體:
來源:轉載
供稿:網友

信息來源:Wayne_Deng的專欄

有沒想過在java script中使用recordset?原來在客戶端操作數據也可以這樣簡單,定義一個數據源,將數據綁定在各種tag上,實現應用程序般的效果,酷斃了?。ㄊ紫壬昝饕稽c,文章的內容全部來自msdn,不過用我自己的話總結而已。)

先看看這樣兩個例子:
http://msdn.microsoft.com/workshop/samples/author/databind/dbevts.htm
http://msdn.microsoft.com/workshop/samples/author/databind/dbupdate.htm
不得不又一次佩服微軟。

這個是DataBinding的架構:
架構
當然實現數據綁定有下面幾步:

第一步,定義數據源
從IE4.0起,就支持下面四種數據源:



Tabular Data Control (TDC)
TDC提供了一個簡單的訪問帶有格式的文本數據的方法,一般是csv文件。
下面是一個簡單的示例:

<OBJECT CLASSID="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83"
    ID=dsoComposer WIDTH=0 HEIGHT=0>
    <PARAM NAME="DataURL" VALUE="composer.csv">
</OBJECT>


Remote Data Service (RDS)
遠程數據服務,直接訪問遠程服務器端的數據,Internet Explorer 4.0. RDS 通過OLE-DB 或 Open Database Connectivity (ODBC)來實現。

示例:

<OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"
    ID=dsoComposer HEIGHT=0 WIDTH=0>
    <PARAM NAME="Server"  VALUE="http://musicserver">
    <PARAM NAME="Connect" VALUE="dsn=music;uid=guest;pwd=">
    <PARAM NAME="SQL"     VALUE="select compsr_name from composer">
</OBJECT>
不過感覺有點安全性的問題,因為客戶端能看到這段代碼。

XML Data Source
XML就不多說了,在IE4.0中這樣使用:
<APPLET
    CODE="com.ms.xml.dso.XMLDSO.class"
    ID="xmldso"
    WIDTH="0"
    HEIGHT="0"
    MAYSCRIPT="true">
    <PARAM NAME="URL" VALUE="composer.xml">
</APPLET>

Internet Explorer 5以上可以這樣:

<!--[if gte IE 5]>
<XML ID="xml1">
<topic-info>
    <page-type>reference</page-type>
    <member-type>property</member-type>
    <persistent-name>ACCESSKEY</persistent-name>
    <runtime-name readable="1" writeable="1">accessKey</runtime-name>
    <abstract>Sets or retrieves the accelerator key for the object.</abstract>
</topic-info>
</XML>
<![endif]-->

另外IE還提供了一個XML數據島的概念:XML Data Islands.

 
MSHTML Data Source
html數據頁示例:
<H1 ID=COMPSR_FIRST>Hector</H1>
<MARQUEE ID=COMPSR_LAST>Berlioz</MARQUEE>
<DIV ID=COMPSR_BIRTH>1803</DIV>
<H2 ID=COMPSR_FIRST>Modest</H2>
<H3 ID=COMPSR_LAST>Moussorgsky</H3>
<BUTTON ID=COMPSR_BIRTH>1839</BUTTON>
<TEXTAREA ID=COMPSR_FIRST>Franz</TEXTAREA>
<XMP ID=COMPSR_LAST>Liszt</XMP>
<SPAN ID=COMPSR_BIRTH>1811</SPAN>

一旦定義可以這樣訪問:

<OBJECT ID=htmlComposer DATA="compdata.htm" HEIGHT=0 WIDTH=0>
</OBJECT>
.第二步:綁定數據到HTML元素上
一般都是通過tag中的datasrc和datafld實現綁定的。例如:
<INPUT TYPE=TEXTBOX DATASRC="#dsoComposers" DATAFLD="compsr_last">

<TABLE DATASRC=#dsoComposer>
<TR>
<TD><DIV DATAFLD=compsr_first></DIV></TD>
</TR>
</TABLE>
這個是綁定表格的示例:
http://msdn.microsoft.com/workshop/samples/author/databind/dbtable.htm

其中數據來源:
<OBJECT id="tdcComposers" CLASSID="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83">
 <PARAM NAME="DataURL" VALUE="http://msdn.microsoft.com/workshop/samples/author/databind/composer.csv">          
 <PARAM NAME="UseHeader" VALUE="True">
 <PARAM NAME="TextQualifier" VALUE="'">
</OBJECT>
綁定的table
<TABLE datasrc=#tdcComposers>
<THEAD><TR STYLE="font-weight:bold">
   <TD>First</TD><TD>Last</TD><TD>Birth</TD><TD>Death</TD><TD>Origin</TD>
   </TR></THEAD>
<TBODY>
<TR>
   <TD><DIV datafld="compsr_first"></DIV></TD>
   <TD><DIV datafld="compsr_last"></DIV></TD>
   <TD><DIV datafld="compsr_birth"></DIV></TD>
   <TD><DIV datafld="compsr_death"></DIV></TD>
   <TD><DIV datafld="origin"></DIV></TD>
</TR>
</TBODY>
</TABLE>
這就是效果了:
First Last Birth Death Origin 
Hector Berlioz 1803 1869 France 
Modest Moussorgsky 1839 1881 Russia 
Franz Liszt 1811 1886 France 
Antonio Vivaldi 1678 1741 Italy 
Johann Sebastian Bach 1685 1750 Germany 
Ludwig van Beethoven 1770 1827 Germany 
Wolfgang Amadeus Mozart 1756 1791 Austria 
Joseph Haydn 1732 1809 Germany 
Claude Debussy 1862 1918 France 


第三步:數據的動態添加,刪除等等(對象模型)
當然綁定可以是動態的:
在script中:
span1.dataSrc = "#dsoComposer";
span1.dataFld = "compsr_first";

html是這樣的:
<SPAN DATASRC="#dsoComposer" DATAFLD="compsr_first"></SPAN>
而且可以訪問數據源的ado:
var oRecordSet = dsoComposer.recordset;
自然就有oRecordSet .MoveNext等等。

如:
<INPUT ID=cmdNavFirst TYPE=BUTTON VALUE="<<"
    onclick="tdcComposers.recordset.MoveFirst()">
<INPUT ID=cmdNavPrev TYPE=BUTTON VALUE=" < "
    onclick="tdcComposers.recordset.MovePrevious();
    if (tdcComposers.recordset.BOF)
        tdcComposers.recordset.MoveFirst();">
<INPUT ID=cmdNavNext TYPE=BUTTON VALUE=" > "
    onclick="tdcComposers.recordset.MoveNext();
        if (tdcComposers.recordset.EOF)
            tdcComposers.recordset.MoveLast();">
<INPUT ID=cmdNavLast TYPE=BUTTON VALUE=">>"
    onclick="tdcComposers.recordset.MoveLast()">

還可以這樣用:
<SCRIPT Language="VBScript">
For Each objFld in rsAttendees.Fields
    document.write("The field name is " & objFld.Name & "<BR>")
    document.write("The field value is " & objFld.Value & "<BR>")
Next
</SCRIPT>

添加刪除記錄就是:oRecordSet.AddNew()以及oRecordSet.Delete()。

第三步:響應各種數據事件(事件模型)
如何在數據更改后做出相應的處理?
msdn中提供的方法是這樣的:
<SCRIPT FOR=cboSort(數據源名) EVENT=onchange(事件名)>
    ……
</SCRIPT>
這些是事件名列表:

Event Bubbles Cancelable Applies to Introduced In Internet Explorer Version 
onbeforeupdate True True bound elements 4.0 
onafterupdate True False bound elements 4.0 
onrowenter True False DSO 4.0 
onrowexit True True DSO 4.0 
onbeforeunload False False window 4.0 
ondataavailable True False DSO 4.0 
ondatasetcomplete True False DSO 4.0 
ondatasetchanged True False DSO 4.0 
onerrorupdate True True bound elements 4.0 
onreadystatechange True False DSO 4.0 
oncellchange True False DSO 5.0 
onrowsinserted True False DSO 5.0 
onrowsdelete True False DSO 5.0 



怎么樣?
我覺得http://msdn.microsoft.com/workshop/samples/author/databind/dbevts.htm算是一個應用比較綜合的例子了,好好研究一下,必有收獲。

網上有不少利用數據綁定實現分頁的示例,其實數據綁定還可以做更多的事情吧?應該在rich client里面有非常大的應用,例如制作非常復雜的datagrid。

現在想進一步搞清楚的是如何簡便實現與服務器端的同步,因為客戶端的數據綁定是對服務器端沒有影響的(你可以從服務器端生成數據源,但是在客戶端的操作不會自動返回服務器),msdn上說RDS可以,但是這種方法太笨拙了吧,又不安全。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩欧美成人| 日韩av在线最新| 精品久久久国产精品999| 午夜精品久久17c| 一本久久综合亚洲鲁鲁| 久久97精品久久久久久久不卡| 成人在线视频网站| 国产精品久久久久免费a∨| 亚州国产精品久久久| 久久久久久成人| www亚洲欧美| 亚洲欧美日韩国产中文| 2019中文字幕在线| 亚洲精品aⅴ中文字幕乱码| 国产精品久久久久久久久久| 亚洲国产成人久久综合一区| 久操成人在线视频| 国产一区二区三区日韩欧美| 久久国产精品首页| 黑人巨大精品欧美一区二区| 日韩精品免费在线视频观看| 亚洲男人天堂九九视频| 永久免费看mv网站入口亚洲| 国产z一区二区三区| 欧美亚洲另类激情另类| 456国产精品| 91精品啪aⅴ在线观看国产| 欧美高清视频免费观看| 国产视频久久久| 中文字幕久热精品视频在线| 国产精品久久久久久久一区探花| 欧美精品精品精品精品免费| 中文字幕精品网| 日韩电影第一页| 97视频免费在线看| 欧美精品亚州精品| 国产精品青青在线观看爽香蕉| 日韩精品久久久久久福利| 精品国产福利视频| 欧美丰满少妇xxxxx| 亚洲第一二三四五区| 人九九综合九九宗合| 精品国产1区2区| 久久久欧美精品| 欧美日韩中国免费专区在线看| 国产在线不卡精品| 国产精品中文在线| 欧美激情按摩在线| 亚洲自拍欧美色图| 国产精品成人在线| 在线播放日韩av| 亚洲欧美精品suv| 亚洲精品电影网在线观看| 538国产精品一区二区免费视频| 日本道色综合久久影院| 亚洲美女精品成人在线视频| 亚洲男女性事视频| 国模私拍视频一区| 在线精品视频视频中文字幕| 色噜噜狠狠色综合网图区| 精品久久久久久久久国产字幕| 欧美日韩电影在线观看| 国产一区二区三区高清在线观看| 色老头一区二区三区在线观看| 欧美一区亚洲一区| 久久69精品久久久久久国产越南| 欧洲亚洲女同hd| 欧美在线亚洲在线| 日韩在线观看免费av| 亚洲欧美国产一区二区三区| 日韩电影免费观看中文字幕| 国产精品久久久久久久app| 国产精品永久免费在线| 欧美黄网免费在线观看| 国内精品一区二区三区| 日韩大片在线观看视频| 91产国在线观看动作片喷水| 精品亚洲精品福利线在观看| 国产精品欧美日韩一区二区| 中文字幕日韩专区| 久久青草福利网站| 综合激情国产一区| 这里只有精品丝袜| 日韩美女av在线免费观看| 久久激情视频久久| 日韩精品在线观看一区二区| 国产日韩欧美一二三区| 亚洲国产天堂久久综合| 日本一欧美一欧美一亚洲视频| 日韩av影片在线观看| 午夜精品久久久久久99热软件| 久久人91精品久久久久久不卡| 中文字幕v亚洲ⅴv天堂| 亚洲视频视频在线| 日韩av电影在线免费播放| 午夜精品一区二区三区在线播放| 国产精品99导航| 午夜精品福利在线观看| 国产视频福利一区| 亚洲91av视频| 国产亚洲视频在线观看| 国产精品视频导航| 国产欧美在线视频| 欧美激情亚洲自拍| 成人在线播放av| 精品国产欧美一区二区三区成人| 国产九九精品视频| 国产激情视频一区| 欧美色道久久88综合亚洲精品| 亚洲美女在线视频| 在线观看久久av| 亚洲第一区中文99精品| 欧美激情在线狂野欧美精品| 亚洲变态欧美另类捆绑| 91精品国产色综合久久不卡98口| 日韩有码在线电影| 欧洲午夜精品久久久| 国语自产精品视频在免费| 国产精品欧美激情在线播放| 亚洲人成伊人成综合网久久久| 成人黄色在线免费| 久久999免费视频| 久热精品视频在线观看一区| 国产精品91在线观看| 国产精品久久久久77777| 精品中文字幕视频| 亚洲色图在线观看| 在线视频日本亚洲性| 成人午夜在线观看| 色噜噜亚洲精品中文字幕| 亚洲精品网站在线播放gif| 久久精品一偷一偷国产| 久久99久久99精品免观看粉嫩| 欧美成人在线网站| 欧美日韩亚洲视频| 欧美精品videosex牲欧美| 成人h片在线播放免费网站| 主播福利视频一区| 日韩精品在线观看网站| 在线精品国产成人综合| 国产精品久久在线观看| 97视频在线观看免费高清完整版在线观看| 精品久久久久久久中文字幕| 国产91网红主播在线观看| 国产精品福利小视频| 国产精品www色诱视频| 亲爱的老师9免费观看全集电视剧| 亚洲精品国产精品乱码不99按摩| 国产亚洲xxx| 国产成人鲁鲁免费视频a| 激情成人在线视频| 91大神福利视频在线| 精品久久久91| 久久99久久99精品中文字幕| 日韩精品视频三区| 欧美成人亚洲成人| 成人黄色av免费在线观看| 国产精品精品视频一区二区三区| 亚洲性日韩精品一区二区| 国产精品一久久香蕉国产线看观看| 国产日韩综合一区二区性色av| 国产精品亚洲视频在线观看| 亚洲九九九在线观看| 久久久欧美一区二区|