擷取 GridView 資料列的欄位值集合
例如有一個 ProductName 的 BoundField,它在 GridView 中的欄位索引為 3,則在瀏覽模式要使用下列方式來取得瀏覽時 ProductName 欄位值。
GridViewRow.Cells(3).Text
若是在編輯模式時,因為欄位值是在 Cell 中的 TextBox,所以要使用下列方式來取得編輯時 ProductName 欄位值。
CType(oRow.Cells(3).Controls(0), TextBox).Text
上述擷取 GridView 欄位值的程式碼相當沒有維護性,只要變更欄位序順或變更欄位類型(例如轉成 TemplateField),很容易就讓程式發生錯誤,而且這種錯誤在編譯時期完全無法查覺,只能透過完整測試來發現問題。
為了解決這個問題,比較好的方式是以欄位名稱來取得欄位值。DataControlField 有一個 ExtractValuesFromCell 方法,不論是瀏覽或編輯模式都可以輕易的擷取出 Cell 的欄位值,不用去管它是那一種 DataControlField (BoundField 、 CheckBoxField 或 TemplateField ) 都可以正確的取得欄位值。
下面範例程式碼中 ExtractRowValues 方法利用這種方式,擷取出 GridView 指定資料列的欄位值集合。
2 ''' 擷取出 GridView 指定資料列的欄位值集合。
3 ''' </summary>
4 ''' <param name="Columns">欄位集合。</param>
5 ''' <param name="Row">資料列。</param>
6 Private Function ExtractRowValues(ByVal Columns As DataControlFieldCollection, ByVal Row As GridViewRow)
As OrderedDictionary
7 Dim oFieldValues As OrderedDictionary
8 Dim oColumn As DataControlField
9 Dim oDictionary As OrderedDictionary
10 Dim oEntry As DictionaryEntry
11 Dim N1 As Integer
12
13 oFieldValues = New OrderedDictionary(Columns.Count)
14 oDictionary = New OrderedDictionary()
15
16 For N1 = 0 To Columns.Count - 1
17 oColumn = Columns.Item(N1)
18 If oColumn.Visible Then
19 oDictionary.Clear()
20 oColumn.ExtractValuesFromCell(oDictionary, TryCast(Row.Cells.Item(N1), DataControlFieldCell), _
Row.RowState, True)
21 For Each oEntry In oDictionary
22 oFieldValues.Item(oEntry.Key) = oEntry.Value
23 Next
24 End If
25 Next
26
27 Return oFieldValues
28 End Function
當 TemplateField 的 Button Click 事件中要取得 ProductName 這個欄位值時,就可以利用下面的方式。
2 Dim oRow As GridViewRow
3 Dim oFieldValues As OrderedDictionary
4
5 oRow = CType(CType(sender, Control).BindingContainer, GridViewRow)
6 oFieldValues = ExtractRowValues(GridView1.Columns, oRow)
7
8 '輸出 ProductName 欄位值
9 Me.Response.Write(oFieldValues("ProductName").ToString())
10 End Sub
擷取 GridView 資料列的欄位值集合相关推荐
- SQL Server 的分散式資料複寫技術
作者:楊先民 本頁內容 前言 資料庫複寫(Replication)的介紹與使用時機 如何建置資料庫複寫 複寫代理程式 (Replication Agent) 的功能 複寫的種類與使用的時機 設計一個安 ...
- FMDB與SQLite 數據庫應用示範:打做一隻簡單的電影資料庫 App
原文:http://www.appcoda.com/fmdb-sqlite-database/ 作者:GABRIEL THEODOROPOULOS 譯者:kmyhy 通常在 App 中使用數據庫并處理 ...
- 實戰案例 - 微信平台與自有產品資料對接 (2)
前面瞭解過程式的背景需求和基本架構之後,接著就來看整個開發工作是靠哪些原始碼兜起來的.因為兩個 WinForm 的原始碼骨架都差不多,所以這邊就拿 SybaseUtility 專案當範例. Servi ...
- 數據移動時發生***識別欄位其外顯值只有當使用了資料行清單且 IDENTITY_INSERT 為 ON 時才能指定...
當數據在兩個相同結構的表中移動并且發生: ***識別欄位其外顯值只有當使用了資料行清單且 IDENTITY_INSERT 為 ON 時才能指定的錯誤時 用以下方法解決: SET IDENTITY_IN ...
- WebApp匯入資料之From Excel
1.情景 點擊"瀏覽"按鈕,尋找要上傳的Excel.按下上傳按鈕,資料寫入資料庫(database)並且顯示在畫面上. 然後,按下"保存"按鈕,Datagrid ...
- (原創) 如何將CMOS所擷取的影像傳到PC端? (SOC) (DE2) (TRDB-DC2)
AbstractDE2提供了Control Panel與Image Converter,可以將CMOS所擷取的影像傳到PC端, Introduction 版權聲明:文中所有範例皆出自DE2光碟,版權歸 ...
- [心得] 如何利用liquibase進行資料庫版本控制 - 實際練習
透過上一篇的基本觀念介紹,希望大家應該有一點點感覺了! 這篇我們就來做個簡單的版本演練,加深印象吧! 我使用的環境如下 System : Windows 7 Database : SQL Server ...
- [转载]將 DVD-9 影片備份成 DVD-5 的教學資料介紹與整理
*前言 所謂的 DVD-9影片 是指該光碟資料超過 4.37GB 也就是單面雙層的格式 要備份至一張 DVD空片 也就是 DVD-5格式 必須將原有影片內容作 "刪減"或" ...
- Python 與數據資料分析2-Matplotlib.pyplot入門
"Talk is cheap. Show me the code." ― Linus Torvalds 老子第41章 上德若谷 大白若辱 大方無隅 大器晚成 大音希聲 大象無形 道 ...
最新文章
- LSGO代码小组第16周复盘日志
- mysql 按两列排序吗_按两列排序MySQL表
- iis6扩展php_Web服务器IIS6的PHP5.2.5最佳配置方法
- opengl微开发之1-从零開始
- Oracle数据库物理存储结构管理遇到的问题与解决
- java面试-Java并发编程(六)——线程间的通信
- 3389改为3390端口如何改
- AJAX异步-向服务器提交数据
- @经典微小说 因为爱
- Silverlight安装相关问题
- 新手如何检查MacBook电池的运行状况
- 2位字母组合的全球国家或地区缩写
- 玲珑3D与几何画板的比较
- YARN 删除所有ACCEPTED任务的命令
- 解读—revealing deep semantic commercial patterns:Insights from urban landscape depiction
- docker镜像的获取删除和查看镜像信息历史记录清理残余镜像
- android网易云播放时图片,Android 网易云音乐图片高斯模糊
- 【飞鱼SEO】sem竞价的特点以及相关规则
- 图片缩略图,CMYK图片变红问题解决
- nginx的rewrite中last和break 及 permanent和redirect的介绍
热门文章
- 亚信安全认证acse_重装出发 | 2019亚信安全合作伙伴大会珠海站召开
- 面试题-java基本数据类型和运算符
- win10运行YOLOv4+OPENCV+VS2017
- 通过流程构建组织的【个人能力】和【团队能力】
- 一招定乾坤(最佳买点)系列
- 人人都能有数字替身:量子动力FACEGOOD发布AI交互实时数字人
- 寻找最优秀AI公司 | 量子位2018年度评选启幕
- 手把手教你训练一个秒杀科比的投篮AI,不服来练 | 附开源代码
- CVPR官网不堪重负,挂了 | 最佳论文、人生赢家、六千余人参会
- 频率学派还是贝叶斯学派?聊一聊机器学习中的MLE和MAP