一般要取得 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 指定資料列的欄位值集合。

 1     ''' <summary>
 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 這個欄位值時,就可以利用下面的方式。

 1     Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
 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 資料列的欄位值集合相关推荐

  1. SQL Server 的分散式資料複寫技術

    作者:楊先民 本頁內容 前言 資料庫複寫(Replication)的介紹與使用時機 如何建置資料庫複寫 複寫代理程式 (Replication Agent) 的功能 複寫的種類與使用的時機 設計一個安 ...

  2. FMDB與SQLite 數據庫應用示範:打做一隻簡單的電影資料庫 App

    原文:http://www.appcoda.com/fmdb-sqlite-database/ 作者:GABRIEL THEODOROPOULOS 譯者:kmyhy 通常在 App 中使用數據庫并處理 ...

  3. 實戰案例 - 微信平台與自有產品資料對接 (2)

    前面瞭解過程式的背景需求和基本架構之後,接著就來看整個開發工作是靠哪些原始碼兜起來的.因為兩個 WinForm 的原始碼骨架都差不多,所以這邊就拿 SybaseUtility 專案當範例. Servi ...

  4. 數據移動時發生***識別欄位其外顯值只有當使用了資料行清單且 IDENTITY_INSERT 為 ON 時才能指定...

    當數據在兩個相同結構的表中移動并且發生: ***識別欄位其外顯值只有當使用了資料行清單且 IDENTITY_INSERT 為 ON 時才能指定的錯誤時 用以下方法解決: SET IDENTITY_IN ...

  5. WebApp匯入資料之From Excel

    1.情景 點擊"瀏覽"按鈕,尋找要上傳的Excel.按下上傳按鈕,資料寫入資料庫(database)並且顯示在畫面上. 然後,按下"保存"按鈕,Datagrid ...

  6. (原創) 如何將CMOS所擷取的影像傳到PC端? (SOC) (DE2) (TRDB-DC2)

    AbstractDE2提供了Control Panel與Image Converter,可以將CMOS所擷取的影像傳到PC端, Introduction 版權聲明:文中所有範例皆出自DE2光碟,版權歸 ...

  7. [心得] 如何利用liquibase進行資料庫版本控制 - 實際練習

    透過上一篇的基本觀念介紹,希望大家應該有一點點感覺了! 這篇我們就來做個簡單的版本演練,加深印象吧! 我使用的環境如下 System : Windows 7 Database : SQL Server ...

  8. [转载]將 DVD-9 影片備份成 DVD-5 的教學資料介紹與整理

    *前言 所謂的 DVD-9影片 是指該光碟資料超過 4.37GB 也就是單面雙層的格式 要備份至一張 DVD空片 也就是 DVD-5格式 必須將原有影片內容作 "刪減"或" ...

  9. Python 與數據資料分析2-Matplotlib.pyplot入門

    "Talk is cheap. Show me the code." ― Linus Torvalds 老子第41章 上德若谷 大白若辱 大方無隅 大器晚成 大音希聲 大象無形 道 ...

最新文章

  1. LSGO代码小组第16周复盘日志
  2. mysql 按两列排序吗_按两列排序MySQL表
  3. iis6扩展php_Web服务器IIS6的PHP5.2.5最佳配置方法
  4. opengl微开发之1-从零開始
  5. Oracle数据库物理存储结构管理遇到的问题与解决
  6. java面试-Java并发编程(六)——线程间的通信
  7. 3389改为3390端口如何改
  8. AJAX异步-向服务器提交数据
  9. @经典微小说 因为爱
  10. Silverlight安装相关问题
  11. 新手如何检查MacBook电池的运行状况
  12. 2位字母组合的全球国家或地区缩写
  13. 玲珑3D与几何画板的比较
  14. YARN 删除所有ACCEPTED任务的命令
  15. 解读—revealing deep semantic commercial patterns:Insights from urban landscape depiction
  16. docker镜像的获取删除和查看镜像信息历史记录清理残余镜像
  17. android网易云播放时图片,Android 网易云音乐图片高斯模糊
  18. 【飞鱼SEO】sem竞价的特点以及相关规则
  19. 图片缩略图,CMYK图片变红问题解决
  20. nginx的rewrite中last和break 及 permanent和redirect的介绍

热门文章

  1. 亚信安全认证acse_重装出发 | 2019亚信安全合作伙伴大会珠海站召开
  2. 面试题-java基本数据类型和运算符
  3. win10运行YOLOv4+OPENCV+VS2017
  4. 通过流程构建组织的【个人能力】和【团队能力】
  5. 一招定乾坤(最佳买点)系列
  6. 人人都能有数字替身:量子动力FACEGOOD发布AI交互实时数字人
  7. 寻找最优秀AI公司 | 量子位2018年度评选启幕
  8. 手把手教你训练一个秒杀科比的投篮AI,不服来练 | 附开源代码
  9. CVPR官网不堪重负,挂了 | 最佳论文、人生赢家、六千余人参会
  10. 频率学派还是贝叶斯学派?聊一聊机器学习中的MLE和MAP