对象变量
所谓对象变量,指的是变量里面所存放的数据是某个对象存放于内存的哪个地方。我们举个例子:
dim cell as htmltablecell
上述叙述宣告了一个cell 变量,里面可以存放htmltablecell 控件所在的内存地址。所以我们执行这个叙述时,内存会为我们准备好一个空间,用来等待存放htmltablecell 控件的内存地址:

这时候cell 变量内的内容是空的,因为我们还没有指定一个对象的内存地址给这个变量。要产生一个对象,要使用new 运算子。new 运算子会依照后面所指定的对象类别来产生对象,例如:
cell=new htmltablecell
这个叙述执行完后,会在内存中产生一个htmltablecell 对象,然后将对象所在的内存地址传给对象变量cell:

将新产生对象的内存地址传给变量时,就是宣告要以这个变量名为这个对象的id 属性,所以我们就可以在程序代码中以指定变量名称的方式控制对象。这就是我们说的对象的参考,所以我们就可以利用下列的方式来控制htmltablecell 对象:
cell.属性="value" '设定对象的属性
变数=cell.属性'取出对象的属性
cell.方法() '执行对象的方法
所以我们要使用指到一个对象型态的变量时, 倘若没有将这个变量指到实际产生出来的对象,那么便不能使用这个对象的属性、方法以及事件。另外以下这两行叙述:
dim cell as htmltablecell
cell=new htmltablecell
可以合并成一行:
dim cell as htmltablecell = new htmltablecell
collection 集合对象
集合对象可以被我们用来管理许多对象。它可以取得对象的地址,并将对象有条理的收纳管理,让我们以一个集合对象就可以取得其它对象的地址,进而控制对象。我们刚刚了解产生对象的方法,我们再来看看如何将这些对象收纳到集合中进行管理。首先我们观察下列的叙述:
dim cell as htmltablecell = new htmltablecell
dim row as htmltablerow = new htmltablerow
cell.innertext="cell1"
row.cells.add(cell)
cell = new htmltablecell '再产生一个新的htmltablecell 对象
cell.innertext="cell2"
row.cells.add(cell)
程序执行完前两行时,会分别产生htmltablecell 对象及htmltablerow 对象,并将其内存地址指定给cell 以及row 这两个对象变量。当程序执行到第四行时,会利用cells 集合对象之add方法,将cell 对象所指到的内存地址存入row 对象的cells 集合中;并且指定一个index 值0,好让我们日后可以指定集合中的这个对象。而当程序执行到第五行时,又产生一个新的htmltablecell 对象,并将这个新对象的内存地址给cell 变量,所以此时cell 变量所指到的对象已经是另外一个新的htmltablecell 对象。程序执行到最后一行时,又再利用row 对象中的cells集合之add 方法,将cell 变量新指到的内存地址加入集合中,并指定index 值为1。上列程序代码执行后的内存状况,如下图所示:

此时我们可以利用集合对象的count 属性,传回集合中总共记录了多少对象的内存地址,例如:
response.write(row.cells.count)
这时候浏览器就会印出2,表示有两个对象被集合所管理。我们将对象的地址收纳进集合时,指定了一个index 值。这个index 值可以让我们把集合中的项目取出来,只要透过集合对象的item方法取出即可。如下范例所示:
dim tmpcell as htmltablecell
tmpcell = row.cells.item(0)
上述程序代码宣告了名为tmpcell 指到htmltablecell 型态对象的对象变量,然后再利用集合对象的item 方法将集合中index 为0 的内存地址取出,并指定给变量tmpcell;所以我们就可以透过tmpcell 变量来控制htmltablecell 对象。我们将这个观念做个简单的验证:
dim cell as htmltablecell = new htmltablecell
dim row as htmltablerow = new htmltablerow
dim tmpcell as htmltablecell
cell.innertext="cell1"
row.cells.add(cell)
cell = new htmltablecell
cell.innertext="cell2"
row.cells.add(cell)
tmpcell = row.cells.item(0) '传回index 为0 所记载的内存地址
response.write(tmpcell.innertext) '印出"cell1"
tmpcell = row.cells.item(1) '传回index 为1 所记载的内存地址
response.write(tmpcell.innertext) '印出"cell2"

上述程序执行结果印出"cell1"及"cell2",验证了集合对象可以管理对象的内存地址,并可以利用item 方法将内存地址取出。
htmltable、htmltablerow、htmltablecell 控件
htmltable 控件可以配合htmltablerow 以及htmltablecell 控件来动态的产生表格。其关系为:

htmltable 控件是由许多列(row)所组成,而每一列中是由许多储存格(cell)所组成。所以htmltable 控件中有rows 集合,htmltablerow 控件中有cells 集合。我们依秩序利用htmltablerow 中cells 集合的add 方法,将htmltablecell 控件串成一列(row)后,再将这一列加到htmltable 的rows 集合中,这样一来表格就大功告成了。这些组成表格的控件都可以设定一些外观属性,我们先来看看htmltablecell 控件的语法:
<td 或th
id="被程序代码所控制的名称"
runat="server"
align="left | center | right"
bgcolor="背景色"
borderclolr="边框颜色"
colspan="跨栏数"
hight="表格高度"
nowarp="true | false"
rowspan="跨列数"
valign="垂直对齐方式"
width="表格宽度"
>储存格内容
</td 或/th>
>
一般来说我们会利用程序来产生htmltablecell 对象,设定好属性之后,我们再加入htmltablerow 对象中的cells 集合中。接下来我们来看看htmltablerow 控件的语法:
nowarp="true | false"
rowspan="跨列数"
valign="垂直对齐方式"
width="表格宽度"
>储存格内容
</td 或/th>
一般来说我们会利用程序来产生htmltablecell 对象,设定好属性之后,我们再加入
htmltablerow 对象中的cells 集合中。接下来我们来看看htmltablerow 控件的语法:
<tr
id="被程序代码所控制的名称"
runat="server"
align="left | center | right"
bgcolor="背景色"
borderclolr="边框颜色"
hight="表格高度"
cells="cell 集合"
valign="垂直对齐方式"
>
<td>字段内容</td>
<td>字段内容</td>
</tr>
利用程序来产生htmltablecell 对象后,我们再加入htmltablerow 对象中的cells 集合中。等表格的一列定义好之后,再利用htmltable 对象的rows 集合,将表格的列加入集合中。我们来看看htmltable 控件的语法:
<table
id="被程序代码所控制的名称"
runat="server"
align="left | center | right"
bgcolor="背景色"
borderclolr="边框颜色"
cellpadding="像素"
cellspacing="像素"
hight="表格高度"
rows="row 集合"
width="表格宽度"
>
<tr><td><td></tr>
<tr><td><td></tr>
</table>
使用范例:
下列范例利用表格控件印出九九表:
<html>
<table id="table1" runat="server" border="1"/>
<form runat="server">
<button id="button1" runat="server" onserverclick="button1_click"
innertext="请按我"/>
</form >
<script language="vb" runat="server" id=script1>
sub button1_click(sender as object, e as eventargs)
dim cell as htmltablecell
dim row as htmltablerow
dim x, y as short
for x=1 to 9 step 1
cell=new htmltablecell
for y=1 to 9 step 1
cell.innerhtml+=cstr(x) & " * " & cstr(y) & " = " & cstr(x * y)
if y<>9 then cell.innerhtml+="<br>"
next y
if x=1 or x=4 or x=7 then row=new htmltablerow
row.cells.add(cell)
if x=3 or x=6 or x=7 then table1.rows.add(row)
next x
end sub
</script>
</html>