(本文撰寫於 ASP.NET 1.x 時期,但觀念、做法亦適用 ASP.NET 2.0)

在 ASP.NET 1.0 中,最火紅的資料顯示控件非 DataGrid 莫屬 (ASP.NET 2.0 的 GridView 亦同),其可顯示儲存在 Web server 記憶體中,DataSet/DataTable 裡的「表格式資料」。但在 ASP.NET 頁面中要處理「表格式資料」,事實上還有另一種較不起眼的 Table 控件 (不同於 DataTable)。該「顯示型」Table 控件雖然內建的功能有限,但自由度反而較高,可由程序員自行撰寫程式碼去設計表格的外觀,包括:可「跨欄、跨列」即時顯示從數據庫撈出的資料;以及自訂依每個「儲存格 (TableCell)」裡的數值不同,動態顯示不同的顏色。所以 Table 控件等於是一個「空心的」顯示型控件,很多特性和方法它都不提供,必須由程序員手工打造,但也因此少掉許多包袱,並可能創作出比其它控件更強大的功能。

不過透過 Table 控件顯示的「表格式資料」,無法在 Post-back 後保存下來,表格內容必須在每次 Post-back 後再重新建構。根據 MSDN Library 的說法,若預期會進行大量的修改,建議改用 DataList 或 DataGrid 控件來代替 Table 控件。


圖 1 Table 控件結構圖

上圖 1 為 Table 控制項的物件結構,每一個「儲存格」等於一個 TableCell 物件,同一列的所有 TableCell 構成一個 TableRow 物件,而所有 TableRow 物件構成一整個 Table 控件。

下圖 2 是版工以兩種不同寫法,所繪製出的兩個 Table 控件。程式碼 (VB.NET/ASP.NET 1.x) 可由本帖最下方的超連結下載。

圖 2 依「儲存格」數值變化,動態顯示不同顏色

範例一:第一個 Table 控制項 (合併資料列)

<Html>
<Body>
<H2>特殊表格的製作</H2>
<ASP:Table Runat="Server" GridLines="Both" CellPadding="4" id="Table1" HorizontalAlign="Center"> 
<ASP:TableRow Runat="Server">

<ASP:TableCell Runat="Server" Text="姓名" BackColor="LightGreen"/>
<ASP:TableCell Runat="Server" Text="Stephen"/>
<ASP:TableCell Runat="Server" RowSpan="2">
  <ASP:Image Runat="Server" ImageUrl="image/money.jpg" Width="40" Height="40"/>
</ASP:TableCell>

</ASP:TableRow>


<ASP:TableRow>

<ASP:TableCell Runat="Server" Text="電子郵件" BackColor="LightGreen"/>
<ASP:TableCell Runat="Server">
  <ASP:HyperLink Runat="Server" Text="j2se@pchome.com.tw" NavigateUrl="mailto:j2se@pchome.com.tw"/>
</ASP:Tablecell>

</ASP:TableRow>
</ASP:Table>
<p>

<ASP:Table Runat="Server" GridLines="Both" CellPadding="4" id="Table2" HorizontalAlign="Center" />

</Body>
</Html>

上方的範例一當中,使用了 RowSpan (合併資料列),其為 TableCell 控件中內建的屬性,除此之外該控件還提供 ColumnSpan 屬性。

下方範例二的股票行情表,會依數據庫中撈出的數值,即時性地在 TableCell 中顯示不同顏色。您在使用上可依專案需求,將某些特定顯示功能寫成副程式或函數。

範例二:第二個 Table 控制項 (依「儲存格」數值變化,動態顯示不同顏色),執行畫面如上圖 2

<%@ Import Namespace =Namespace="System.Data" %>
<%@ Import Namespace =Namespace="System.Data.OleDb" %>

<script Language="VB" runat="server">

Sub Page_Load()Sub Page_Load(sender As Object, e As EventArgs) 
 Dim myConn As OleDbConnection
 Dim myCmd As OleDbCommand 
 Dim myRd As OleDbDataReader

     …中間略…

 ' DataReader 物件連結「股票行情表」資料表
 myRd = myCmd.ExecuteReader()

 ' 呼叫副程式,利用 DataReader 物件逐欄逐列讀取資料表,然後填入輸出用的表格
 OutputToTable( myRd )

 ' 關閉資料庫連線
 myConn.Close()
End Sub

Sub OutputToTable()Sub OutputToTable( Rd As OleDbDataReader )
 Dim I As Integer
 Dim row As TableRow
 Dim cell As TableCell

 ' 將資料表的「抬頭」填入表格中 
 row = New TableRow()
 row.BackColor = Drawing.Color.Gold
 For I = 0 To Rd.FieldCount - 1
  cell = New TableCell()
  cell.Text = Rd.GetName(I)  ' 將 DataReader 所讀取的第 I 欄欄位抬頭設定給 TableCell
  row.Cells.Add( cell )     ' 將 TableCell 加入 TableRow 之中
 Next
 Table2.Rows.Add( row )

 ' 逐列讀出資料表,再將資料依序填入表格中
 While Rd.Read()
  row = New TableRow()
  For I = 0 To Rd.FieldCount - 1
   cell = New TableCell()
   cell.Text = Rd.Item(I)   ' 將 DataReader 所讀取的第 I 欄資料設定給 TableCell
   row.Cells.Add( cell )    ' 將 TableCell 加入 TableRow 之中

   If (I=0) Then
    cell.BackColor=Drawing.Color.Goldenrod
    cell.ForeColor=Drawing.Color.SteelBlue
   End IF

   If (I=Rd.FieldCount-4) And Val(cell.Text)>0 Then 
    cell.BackColor=Drawing.Color.Red
    cell.ForeColor=Drawing.Color.Pink 
   ElseIf (I=Rd.FieldCount-4) And Val(cell.Text)<0 Then 
    cell.BackColor=Drawing.Color.LawnGreen
    cell.ForeColor=Drawing.Color.GhostWhite
   End If

   If (I=Rd.FieldCount-3) And Val(cell.Text)>20 Then 
    cell.BackColor=Drawing.Color.Pink
    cell.ForeColor=Drawing.Color.Red 
   End If

   If (I=Rd.FieldCount-2) And Val(cell.Text)>17 Then 
    cell.BackColor=Drawing.Color.Pink
    cell.ForeColor=Drawing.Color.Red 
   End If

   If (I=Rd.FieldCount-1) And Val(cell.Text)>2000 Then 
    cell.BackColor=Drawing.Color.Red
    cell.ForeColor=Drawing.Color.Pink 
   ElseIf (I=Rd.FieldCount-1) And Val(cell.Text)>200 Then 
    cell.BackColor=Drawing.Color.HotPink
    cell.ForeColor=Drawing.Color.LightSteelBlue
   End If 
  Next 
  Table2.Rows.Add( row )   ' 將 TableRow 加入 Table 之中
 End While
End Sub 

</script>

在範例二中,ASP.NET 頁面用 DataReader 讀取資料,再把取得的資料填入 Table 控件中。您還可在範例二中,再加上「跨欄、跨列」的功能。至於還能達成哪些應用,則端看程序員的巧思了。

-------------------------------------------------
本帖的範例源碼下載點:
http://files.cnblogs.com/WizardWu/060106.zip

-------------------------------------------------
(本文在版工的舊 Blog 中,發表日期為 2006/01/06)

转载于:https://www.cnblogs.com/WizardWu/archive/2008/06/27/1230833.html

替 ASP.NET 的 Table 控件換裝相关推荐

  1. ASP.NET中table控件去掉 td 之前的间隔

    通过css设置了td的边框,发现之间存在间隔. 解决方法: table{ border-collapse:collapse; } 设置td边框是因为设置table的边框只有最外面一圈,而不是每行每列都 ...

  2. ASP.net Table 控件

    功能:在Web页中创建通用表. 属性: 1.CellPadding属性:用于设置表中单元格的边框和内容之间的距离(以像素为单位).默认为-1(未设置). 2.CellSpacing属性:用于设置表中单 ...

  3. 创建用于 ASP.NET 的分页程序控件

    Dino Esposito Wintellect 2003 年 10 月 适用于:     Microsoft® ASP.NET 摘要:解决向任何 ASP.NET 控件添加分页功能的问题.还为开发复合 ...

  4. 英文版资料[庖丁解牛—纵向切入Asp.net 3.5控件和组件开发技术]

    英文版资料[庖丁解牛-纵向切入Asp.net 3.5控件和组件开发技术] . Carving Up an Ox * Book Name <Carving Up an Ox: In-depth A ...

  5. 构建安全的 ASP.NET 网页和控件

    本页内容 本模块内容 目标 适用范围 如何使用本模块 威胁和对策 设计注意事项 输入验证 跨站点脚本 身份验证 授权 模拟 敏感数据 会话管理 参数处理 异常管理 审核和日志记录 小结 其他资源 本模 ...

  6. 【开源】QuickPager ASP.NET2.0分页控件V2.0.0.3 【增加了使用说明】

    ================================ 欢迎转载,但是请注明出处.本文出自博客园 .谢谢合作! ================================ 最新版本:V ...

  7. 用JS验证asp.net服务端控件

    可以用javascript来验证asp.net服务端的控件,不过目前只局限于验证textbox(输入框)不能为空的情况.还有一个前提条件是,提交按钮必须是html的控件,再加上一个runat=serv ...

  8. ASP.NET如何给控件增加属性?

    ASP.NET如何给控件增加属性? 今天xuedaonet给大家介绍提利用ASP.NET给控件增加属性的操作方法,请看下文! ASP.net给控件增加属性的思路 因为用户控件也是一个类,双城计中计20 ...

  9. 利用ASP.NET2.0向导控件一步步建立与用户的交互--------提高和自定义用户体验

    本文是利用ASP.NET2.0向导控件一步步建立与用户的交互--------基本概念的后续文章,介绍了Wizard控件的高级使用以提高用户使用体验. 单击下面链接进行查看 http://www.cnm ...

最新文章

  1. 一瓶可乐的自动售货机指令“旅程”
  2. GitHub入门详解
  3. 使用canvas实现对图片的批量打码
  4. 摩根大通:iPhone 13和新款iPhone SE将推动苹果业绩明年再破纪录
  5. ubuntu sun-java-jdk(zhuan)
  6. Access数据库问题锦集
  7. win11语言输入没反应怎么办 windows11语音输入没反应的解决方法
  8. iOS base64编解码
  9. IE 9 beta 下载地址
  10. JUCE学习笔记07-自定义正弦振荡器类
  11. Python制作登陆界面(1)(超简单)
  12. 计算机理论高考知识点总结,计算机技能高考基础知识(常考知识点记忆)
  13. 快速将bmp批量转换jpg的方法
  14. 大数据服务模型设计:默默无闻的贤内助
  15. laya 怎么生成签名_手写签名在线生成器一笔签-手写签名在线生成器微信
  16. 传输层协议(1):TCP 报文结构
  17. 【Proteus仿真】LCD1602+DS1307按键设置简易时钟
  18. tcp四次挥手 最后一次ack如果没有收到
  19. 寒假作业 pta编程总结3
  20. 三种方法在当前目录下打开cmd命令窗口

热门文章

  1. android 悬浮按钮 魅族,魅族,我的悬浮球功能比你的强大:悬浮菜单
  2. linux s g文本替换问题
  3. pandas分批读取csv文件
  4. centos下新建超级用户及sudoers权限问题
  5. Prepare the Knowledge Base for Success
  6. Shiro实现认证_ini
  7. BugkuCTF多种方法解决
  8. Oracle 数据库 - 使用UEStudio修改dmp文件版本号,解决imp命令恢复的数据库与dmp本地文件版本号不匹配导致的导入失败问题,“ORACLE error 12547”问题处理
  9. Windows 技术篇-WPS关闭推送广告配置方法
  10. Word 技术篇-段落的前后间距单位磅改为行,行改为磅