在ASP中使用智岛网格控件全过程

发表于:2007-06-30来源:作者:点击数: 标签:
智岛网格控件作为数据的表示层,可以非常方便的进行货币样式、人民币大小写、中文大小写、各种逻辑样式、百分比样式、千分位分割等样式设置;可以冻结、锁定行列、对输入数据进行验证;可对字段设置公式,方便快捷地统计、汇总数据。智岛网格控件以其丰富多
     智岛网格控件作为数据的表示层,可以非常方便的进行货币样式、人民币大小写、中文大小写、各种逻辑样式、百分比样式、千分位分割等样式设置;可以冻结、锁定行列、对输入数据进行验证;可对字段设置公式,方便快捷地统计、汇总数据。智岛网格控件以其丰富多样的表现形式、简单易用的操作赢得了广大软件开发人员的一致好评。下面和大家分享一下智岛网格控件在ASP中的应用心得:
  
  
  
  
  图1 样式设置
  
  
  图2 图片管理
  
  
  图4 汇总模式
  
  
  图5 冻结锁定
  
  
  图6 合并模式
  
  一、注册智岛网格控件
  
  下载智岛网格控件(其文件名为OGrid.ocx)后,按照如下方法注册控件:
  
  点击“开始”→“运行”;在运行对话框中输入以下命令:
  regsvr32 < OGrid.ocx文件的绝对路径>  注册智岛网格控件控件
  regsvr32 /u < OGrid.ocx文件的绝对路径> 解除智岛网格控件的注册
  
  二、在页面中添加智岛网格控件
  
  在页面中加入以下代码,即可插入智岛网格控件:
  
  <object classid="clsid:79B00E6B-6110-46AE-891C-97773022C958" width="0" height="0" id="OGrid" CODEBASE="http://www.oapro.com/ostarocx/download/OGrid.ocx"></object>
  
  其中:
  width和height:指控件的显示宽度和高度;
  id:指控件对象的名称,通过该名称实现对控件的操作;
  CODEBASE:指没有安装智岛网格控件的客户端运行该页面时自动下载安装该控件的刂贰?lt;/P>
  
  三、用智岛网格控件表现XML格式数据
  
  1. XML文档格式
  
  智岛网格控件采用XML文档作为数据存储交换格式,下面是一份XML文档格式:
  
  <?xml version="1.0" encoding="GB2312"?>
  <Table>
   <TableInfo><!--表信息-->
   <TableName>人事表</TableName><!--数据表名称-->
   <FieldInfoArray>
   <FieldInfo><!--记录字段信息的XML-->
   <FieldName>姓名</FieldName><!--字段名称-->
   <DataType>10</DataType><!--字段数据类型3:逻辑型7:数值型10:字符型12:备注型23:日期型-->
   <CellType>0</CellType><!--表元类型0:文本框,1:组合框,2:检验框,3:日期时间,7:人民币小写栏金额控件-->
   </FieldInfo>
   ...
   </FieldInfoArray>
   </TableInfo>
  
   <Rows><!--多行数据-->
   <Row><!--单行数据-->
   <name>张三</name>
   <sex>男</sex>
   ...
   </Row>
   ...
   </Rows>
  </Table>
  
  2. 代码实现
  
  通过以下语句通知智岛网格控件打开XML文档:
  
  OGrid.OpenTableXML("")
  
  其中引号内XML文档的绝对路径,例如:
  http://www.oapro.com/ostarocx/sample/OGrid/xml/样式设置.xml
  或者
  C:\样式设置.xml
  
  四、用智岛网格控件表现来自于数据库的数据
  
  1. XML文档格式
  
  智岛网格控件采用XML文档作为交换格式,但更多的数据源是数据库,如何表现来自于数据库的数据呢?我们可以将数据库的数据动态转为XML格式。以下代码实现了将一ACCESS数据库中指定数据表的内容转为XML文档格式。您可将代码中db.mdb文件换成您自己的数据库名称。指定的数据表名称来自于传递到该文件的参数值:Table_name。
  
  <%
  dim sql,rs
  dim Table_name
  <!--取得数据表名称-->
  Table_name=request.QueryString("Table_name")
  Set rs= Server.CreateObject("ADODB.Recordset")
  Const adSchemaTables = 20
  adSchemaColumns = 4
  strConn="DBQ="+server.mappath("db.mdb")+";DefaultDir=;DRIVER={Microsoft Aclearcase/" target="_blank" >ccess Driver (*.mdb)};"
  Set oConn = Server.CreateObject("ADODB.Connection")
  oConn.open strConn
  Set rstSchema = oConn.OpenSchema(adSchemaColumns)
  Set rsttable = oConn.OpenSchema(adSchemaTables)
  i=0
  %><?xml version="1.0" encoding="gb2312"?>
  <Table>
  <TableInfo>
  <TableName><%=Table_name%></TableName>
  <FieldInfoArray>
  <%
  //生成XML文件头
  Do Until rstSchema.EOF
  if rstSchema("Table_name") = Table_name then
  if rstschema("column_Name")<>"ORowInfo" or rstschema("column_Name")<>"osysMachineID" then
  %> <FieldInfo>
  <FieldName><%=rstschema("column_Name")%></FieldName> <ColName><%=rstschema("column_Name")%></ColName>
  <%select case rstschema("data_type")
  case "130"
  if rstschema("CHARACTER_MAXIMUM_LENGTH") = 1073741823 then%> <DataType>12</DataType>
  <CellType>0</CellType>
  <%else%> <DataType>10</DataType>
  <CellType>0</CellType>
  <%end if
  case 135%> <DataType>23</DataType>
  <CellType>3</CellType>
  <%case 3%> <DataType>7</DataType>
  <CellType>0</CellType>
  <%case 11%> <DataType>3</DataType>
  <CellType>2</CellType>
  <%case 131%> <DataType>10</DataType>
  <CellType>0</CellType>
  <%case 5%> <DataType>7</DataType>
  <CellType>0</CellType>
  <%case else%> <DataType>10</DataType>
  <CellType>0</CellType>
  <%end select%> </FieldInfo>
  <%end if
  end if
  rstSchema.MoveNextLoop
  %> </FieldInfoArray>
  </TableInfo>
  <Rows>
  //生成XML文件体
  <%
  sql="select * from "&Table_name
  rs.open sql,strConn,1,1
  Do while Not rs.eof
  %> <Row>
  <%
  for k=0 to rs.fields.count-1
  if rs(k).name<>"ORowInfo" or rs(k).name<>"osysMachineID" then
  %> <<%=rs(k).name%>><%=rs(k)%></<%=rs(k).name%>>
  <%
  end if
  next
  %> </Row>
  <%
  rs.movenext
  loop
  rs.close
  %> </Rows>
  </Table>
  
  2. 代码实现
  
  通过以下语句通知智岛网格控件打开XML文档:
  
  OGrid.SetTableXML(OGrid.HttpGet("http://www.oapro.com/mdb2xml.asp","Table_name=<%=TABLE_NAME%>"))
  
  其中方法HttpGet有二个参数,第一个参数为我们上面介绍的实现数据库转换XML格式的网页地址,一定要为网址格式,不能用相对或绝对路径(因为目前该方法尚不支持),第二个参数为传递到该文件的参数,这里我们传递的是数据表名称:Table_name。
  
  五、保存对数据的修改
  
  在网格控件中可以新增、删除记录以及修改记录内容,如何使这些修改保存到数据源中去?智岛网格控件提供了三个这方面的事件:
  
  1. 新增记录:EventSQLInsertRecord(strTableName,strSQL)
  2. 删除记录:EventSQLDeleteRecord(strTableName,strSQL)
  3. 修改记录:EventSQLUpdateRecord(strTableName,strSQL)
  其中:
  strTableName为产生事件的数据表名称;
  strSQL为执行事件的SQL语句。
  
  这二个参数由智岛网格控件提供给我们,供我们调用。
  
  我们可通过脚本实现对事件的触发,以下是一范例代码:
  
  <SCRIPT FOR="OGrid" EVENT="EventSQLInsertRecord(strTableName,strSQL)" LANGUAGE="JavaScript" >
  OGrid.HttpGet("http://www.oapro.com/updata.asp","sql="+strSQL);
  </SCRIPT>
  
  以上代码实现了网格控件的记录发生修改时,便调用updata.asp文件实现对数据库相关内容进行修改。updata.asp文件内容如下:
  
  <%@language=vbscript codepage=936 %>
  <%
  dim sql
  sql=request.QueryString("sql")
  response.write sql
  strConn="DBQ="+server.mappath("db.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
  Set oConn = Server.CreateObject("ADODB.Connection")
  oConn.open strConn
  oConn.Execute(sql)
  response.write sql
  %>
  
  六、范例
  
  上面文章完整地介绍了智岛网格控件在ASP中的使用全过程,也许一个编辑成型的范例更具有说服力。那么就请领略这份鲜活的感觉吧:http://www.oapro.com/ostarocx/sample/ogrid_f/default.asp。
  
  
  
  
  

原文转自:http://www.ltesting.net