處理數據行(DataRow)
Windows窗體中的數據綁定列表框和組合框很節省時間典型的代碼如下(假定已經建立了SqlDataAdapter或者其它部件獲取數據)
Dim ds As New DataSet()
SqlDataAdapterFill(ds Customers)
ListBoxDataSource = dsTables(Customers)
ListBoxDisplayMember = CompanyName
ListBoxValueMember = CustomerID
在這種情況下代碼使用Northwind數據庫的顧客記錄工作DisplayMember屬性設置為你希望用戶在列表框中看到的記錄字段它是customers表的CompanyName通常ValueMember屬性設置為數據表中的一個鍵字段對於customer來說是CustomerID一旦用戶選擇了列表框中的一行很容易使用列表框的SelectedValue屬性獲得鍵字段
MsgBox(ListBoxSelectedValue)
但是有可能需要一個與被選擇項相關的整個數據行對象的引用例如如果被選擇的行需要被刪除就不知道鍵了你需要一個數據行的引用以使用Delete方法
典型的Visual Basic開發者通常這樣想我已經得到了該行的鍵了我將編寫一些邏輯來查找使用該鍵的行這樣可以實現但是有更好的實現方法可以使用一行代碼獲取與列表框中選項關聯的數據行
Dim dr As DataRow = CType(ListBoxSelectedItem DataRowView)Row
通常該邏輯不會憑直覺出現即使對經驗豐富的開發者為了解釋這是怎樣實現的我把上面的一行拆成幾行下面的代碼與上面代碼的功能相同
Dim drv As DataRowView
drv = CType(ListBoxSelectedItem DataRowView)
Dim dr As DataRow
dr = drvRow
DataRowView類是數據行的包裝它被多個Windows窗體控件使用它使得顯示與控件中的數據行相關的數據更加容易當列表框被數據綁定到數據表時(假定列表框中的有些行當前被選定了)列表框的SelectedItem屬性保存了一個DataRowView對象
這意味著我們能把列表框的SelectedItem屬性轉換到DataRowView對象這就是上面代碼中的第二行實現的接著DataRowView暴露一個Row屬性它指向被包裝的數據行上面的代碼聲明了一個數據行並設置了Row屬性
轉換對象的類型以訪問它的接口的技術在Visual Basic 中不是經常使用但是在Visual Basic NET中這是經常的有了上面的例子後大多數有經驗的開發者迅速跟上了這種技術
數據行的引用(dr)可用於用任何方式維護行訪問數據行中的任何特定字段是可行的行中的數據可以被改變能使數據行的Delete方法把該行標識為刪除或者從數據表的行集合中刪除該行下面的代碼標識刪除了一行
drDelete()
使用主鍵(由ListBoxSelectedValue返回)查找下層數據行的方法需要很多代碼要花很長時間執行起來更慢對於剛開始使用Visual Basic NET的程序員來說花幾個小時編碼是很正常的理解上面的技術節約了很多時間更簡單容易維護代碼
From:http://tw.wingwit.com/Article/program/net/201311/12974.html