[原创]一个类似Ajax的咚咚,支持IE4,支持98

在ASP的时候我写的一篇文章,现在改用ASP .NET 2.0
一个类似Ajax的咚咚,支持IE4,支持98。
好像95装了IE4都可以。

一般在微软平台使用Ajax,大部分其实使用的是微软的XML HTTP这个技术。
其实微软还有一个更老的技术,实现无刷新,且客户段无需安装任何东西。而且数据可以直接绑定到表格,无需任何JavaScrip转化Tabular Data Control。

Tabular Data Control(以下称TDC)是基于IE4以上浏览器(可见要求很低)。功能是提供对格式化文本文件的访问。也就是说,TDC提供的数据来源是用指定分隔符来格式化的文本文件。

TDC 的属性有
AppendData
指定已存在的数据,如果发生新的数据的新建或更新。

CaseSensitive
敏感字符。

CharSet
文件编码格式。

DataURL
指定数据文件的位置。 

EscapeChar
转义字符。

Filter
指定过滤数据的方法。

Language
数据文件的语言格式,包括数字和数据的格式。

RowDelim
指定每一行的行终结字符。

Sort
排序方式。

TextQualifier
文本修饰方式。

UseHeader
指定是否显示数据文件第一行的头信息。 

FieldDelim
指定分割数据列的字符。

方法
Reset
刷新数据。

示例:
在Visual Studio 2005中新建一个项目

1、新建数据提供文件Data.aspx,新建时去掉代码分割复选框。
清空Data.aspx所有内容。然后键入以下代码。
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Text" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%
 Response.ContentEncoding=Encoding.GetEncoding("GB2312");
 Request.ContentEncoding=Encoding.GetEncoding("GB2312");
 
 SqlConnection cn=new SqlConnection("server=169.0.0.1;database=Test;uid=sa;pwd=iloveyouhpx;");
    SqlCommand cm = new SqlCommand("select top 100 单位,书名,版别,书号 from 图书分销_订单", cn);   
   
 cm.CommandType=CommandType.Text;

    cn.Open();
   
 SqlDataReader r=cm.ExecuteReader();
 
 Response.Write(r.GetName(0));
 Response.Write(",");
 Response.Write(r.GetName(1));
 Response.Write(",");
 Response.Write(r.GetName(2));
 Response.Write(",");
 Response.Write(r.GetName(3));
 Response.Write("\n");
 
 while(r.Read())
 {
        Response.Write(r.GetString(0));
  Response.Write(",");
  Response.Write(r.GetString(1));
  Response.Write(",");
        Response.Write(r.GetString(2));
  Response.Write(",");
  Response.Write(r.GetString(3));
  Response.Write("\n");  
 }
 
 cn.Close();
%>
以上代码的目的是形成一个,用“,”分割的格式化数据文本文件。
运行后的结果如下(文件源文本)

单位,书名,版别,书号
中国刑警学院图书馆,权力定律,群言版,ISBN7-80080-398-8
中国刑警学院图书馆,八千里路云和月,京华版,ISBN7-80600-725-3
....
现在需要建立另一个文件来显示数据。
2、新建Test.aspx
(1)嵌入ActiveX控件
<object id="dsoSoftware" classid="clsid:333c7bc4-460f-11d0-bc04-0080c7055a83">
        <param name="useheader" value="-1" />
        <param name="FieldDelim" value="," />
        <param name="RowDelim" value="" />
        <param name="TextQualifier" value="" />
        <param name="EscapeChar" value="" />
        <param name="Sortascending" value="-1" />
        <param name="SortColumn" value="" />
        <param name="FilterValue" value="" />
        <param name="FilterCriterion" value="" />
        <param name="FilterColumn" value="" />
        <param name="CharSet" value="hz-gb-2312" />
        <param name="Language" value="" />
        <param name="CaseSensitive" value="-1" />
        <param name="Sort" value="" />
        <param name="Filter" value="" />
        <param name="appendData" value="0" />
        <param name="DataURL" value="" />
        <param name="ReadyState" value="4" />
    </object>
(2)控件表格项
<table>
        <tr>
            <td>
                <input type="button" value="查询" id="Search" />
            </td>
        </tr>
    </table>
    <table>
        <tr>
            <td>
                <input type="button" value="第一页" id="FirstPage" />
            </td>
            <td>
                <input type="button" value="上一页" id="PrevPage" />
            </td>
            <td>
                <input type="button" value="下一页" id="NextPage" />
            </td>
            <td>
                <input type="button" value="最后一页" id="LastPage" />
            </td>
        </tr>
        <tr>
            <td colspan="4">
                <span id="ResultMessage"></span>
            </td>
        </tr>
    </table>
(3)数据绑定到表格
datasrc为ActiveX控件的ID加上#符号;
datapagesize 为分页每页的记录数;
datafld 为当前HTML元素绑定的数据列;

    <table datasrc="#dsoSoftware" datapagesize="10" id="software" border="1" width="98%"
        cellspacing="0" cellpadding="0" style="display: none; border-collapse: collapse;
        font-size: smaller">
        <thead>
            <tr>
                <th width="200" bgcolor="#3366CC" height="22">
                    <font face="Arial" color="#ffffff">单位</font></th>
                <th width="300" bgcolor="#3366CC" height="22">
                    <font face="Arial" color="#ffffff">书名</font></th>
                <th width="200" bgcolor="#3366CC" height="22">
                    <font face="Arial" color="#ffffff">版别</font></th>
                <th width="150" bgcolor="#3366CC" height="22">
                    <font face="Arial" color="#ffffff">书号</font></th>
            </tr>
        </thead>
        <tr>
            <td width="200">
                <font face="Arial"><span datafld="单位"></span></font>
            </td>
            <td width="300">
                <font face="Arial"><span datafld="书名"></span></font>
            </td>
            <td width="200">
                <font face="Arial"><span datafld="版别"></span></font>
            </td>
            <td width="150">
                <font face="Arial"><span datafld="书号"></span></font>
            </td>
        </tr>
    </table>
(4)结果显示
 <table>
        <tr>
            <td>
                <span id="PageMessage"></span>
            </td>
        </tr>
    </table>
(5)VBScript控制代码
<script language="vbscript" type="text/vbscript">
Dim rsCount '记录数
Dim pageCount '页数
Dim iPage '当前页

Sub FirstPage_onClick()
 software.firstPage() '第一页
 iPage=1
 LastPage.disabled=false
 NextPage.disabled=false
 FirstPage.disabled=true
 PrevPage.disabled=true
 PageMessage.innerText="第"&iPage&"页"
End Sub

Sub PrevPage_onClick()
 LastPage.disabled=false
 NextPage.disabled=false
 If iPage>1 Then
  software.previousPage() '上一页
  iPage=iPage-1  
  If iPage<2 Then
   FirstPage.disabled=true
   PrevPage.disabled=true
  End If
 End If
 PageMessage.innerText="第"&iPage&"页"
End Sub

Sub NextPage_onClick()
 FirstPage.disabled=false
 PrevPage.disabled=false
 If iPage<pageCount Then
  software.nextPage() '下一页
  iPage=iPage+1
  If iPage>=pageCount Then
   LastPage.disabled=true
   NextPage.disabled=true
  End If
 End If
 PageMessage.innerText="第"&iPage&"页"
End Sub

Sub LastPage_onClick()
 software.lastPage() '最后一页
 iPage=pageCount
 LastPage.disabled=true
 NextPage.disabled=true
 FirstPage.disabled=false
 PrevPage.disabled=false
 PageMessage.innerText="第"&iPage&"页"
End Sub

Sub Search_onClick()
 dsoSoftware.DataURL = "Data.aspx"
 rsCount=0 
 FirstPage.style.display="none"
 PrevPage.style.display="none"
 NextPage.style.display="none"
 LastPage.style.display="none"
 software.style.display="none"
 PageMessage.style.display="none"
 ResultMessage.style.display="block"
 ResultMessage.innerText="正在搜索数据..."
 dsoSoftware.reset '搜索数据,可以理解为Su
End Sub

'数据搜索完毕
Sub dsoSoftware_onDataSetComplete()
 FirstPage.disabled=true
 PrevPage.disabled=true
 rsCount=dsoSoftware.recordset.recordcount
 If rsCount>0 Then
  FirstPage.style.display="block"
  PrevPage.style.display="block"
  NextPage.style.display="block"
  LastPage.style.display="block"
  software.style.display="block"
  ResultMessage.style.display="block"
  PageMessage.style.display="block"
  pageCount=rsCount\10-CBool(rsCount mod 10)
  ResultMessage.innerText="共找到"&rsCount&"个符合搜索条件的结果 共"&pageCount&"页"
  PageMessage.innerText="第1页"
  iPage=1
  If PageCount<2 Then
   FirstPage.style.display="none"
   PrevPage.style.display="none"
   NextPage.style.display="none"
   LastPage.style.display="none"
  Else
   NextPage.disabled=false
   LastPage.disabled=false
  End If
 Else
  FirstPage.style.display="none"
  PrevPage.style.display="none"
  NextPage.style.display="none"
  LastPage.style.display="none"
  software.style.display="none"
  PageMessage.style.display="none"
  ResultMessage.style.display="block"
  ResultMessage.innerText="没有找到符合搜索条件的软件"
 End If
End Sub

'出现错误
Sub Window_onError(msg,url,line)
 ResultMessage.innerHTML="<b>网页产生了一个错误。</b><p>"
 ResultMessage.innerHTML=ResultMessage.innerHTML+"错误描述: " + msg + "<br>"
 ResultMessage.innerHTML=ResultMessage.innerHTML+"行:" + line + "<br>"
 ResultMessage.innerHTML=ResultMessage.innerHTML+"链接:" + url + "<br>"
End Sub
</script>

总结:
  • 最早我看到使用这个控件的网页是微软全球下载中心。
  • 该控件是可以绑定Text文本框的,其他HTML控件也可以。
  • 为什么这个控件没有再用了。估计是因为功能还是简单了点。

posted on 2006-05-14 10:41  Hussar  阅读(619)  评论(0编辑  收藏  举报

导航