1. 程式人生 > >VB.NET——泛型集合的使用

VB.NET——泛型集合的使用

   因為我們每次和資料庫互動都需要轉換為泛型,所以將這個方法抽象出來,放在D層一遍呼叫,和sqlhelper類的作用相似
'**********************************************
'說明:將DataTable轉化為泛型集合
'名稱空間:DAL
'機器名稱:曉
'建立日期:2015/2/23 11:13:28
'作者:鄭浩
'版本號:V1.00
'**********************************************

Imports System.Collections.Generic  '增加泛型的名稱空間  
Imports System.Reflection '引入反射:為了使用PropertyInfo 
Public Class  ConvertGenericsHelper
    '將datatable轉化為泛型集合  
    Public Shared Function convertToList(Of T As {New})(ByVal dt As DataTable) As IList(Of T)
        '注意:convertToList(Of T As {New}) 這裡的new是用來約束T的,必須有,不然new T的時候會出現錯誤  

        Dim myList As New List(Of T)   '定義最終返回的集合  

        Dim myTpye As Type = GetType(T) '得到實體類的型別名  
        Dim dr As DataRow   '定義行集  

        Dim tempName As String = String.Empty   '定義一個臨時變數  

        '遍歷DataTable的所有資料行  
        For Each dr In dt.Rows

            Dim myT As New T    '定義一個實體類的物件  
            Dim propertys() As PropertyInfo = myT.GetType().GetProperties()  '定義屬性集合  
            Dim Pr As PropertyInfo

            '遍歷該物件的所有屬性  
            For Each Pr In propertys
                tempName = Pr.Name '將屬性名稱賦值給臨時變數  

                '檢查DataTable是否包含此列(列名==物件的屬性名)   
                If (dt.Columns.Contains(tempName)) Then     '將此屬性與datatable裡的列明比較,檢視datatable是否包含此屬性  
                    '判斷此屬性是否有Setter  
                    If (Pr.CanWrite = False) Then   '判斷此屬性是否可寫,如果不可寫,跳出本次迴圈  
                        Continue For
                    End If
                    Dim value As Object = dr(tempName)  '定義一個物件型的變數來儲存列的值  
                    If (value.ToString <> DBNull.Value.ToString()) Then '如果非空,則賦給物件的屬性  
                        Pr.SetValue(myT, value, Nothing)    '在執行期間,通過反射,動態的訪問一個物件的屬性  
                    End If
                End If
            Next
            myList.Add(myT)   '新增到集合  
        Next
        Return myList   '返回實體集合  
    End Function
End Class

 D層程式碼

'**********************************************
'說明:利用泛型集合來檢視學生餘額
'名稱空間:DAL
'機器名稱:曉
'建立日期:2015/2/23 11:27:21
'作者:鄭浩
'版本號:V1.00
'**********************************************
Imports IDAL
Imports System.Data.SqlClient
Public Class SqlserverCheckBalanceDAL : Implements ICheckBalance


    Public Function ICheckBalance(studentinfo As Entity.EN_StudentInfo) As List(Of Entity.EN_StudentInfo) Implements ICheckBalance.ICheckBalance
        Dim sql As String
        sql = "select * from ZH_StudentInfo where CardNo = @CardNo"
        Dim paras As SqlParameter() = {New SqlParameter("CardNo", studentinfo.CardNo)}
        Dim dt As New DataTable
        '儲存轉換後的泛型集合  
        Dim myList As New List(Of Entity.EN_StudentInfo)
        dt = SqlHelper.SqlHelper.ExecSelect(sql, CommandType.Text, paras)
        '先判斷dt是否為空  
        If dt.Rows.Count > 0 Then
            '將dt轉換為泛型集合  
            myList = ConvertGenericsHelper.convertToList(Of Entity.EN_StudentInfo)(dt)
            Return myList
        Else
            Return Nothing
        End If
    End Function
End Class
U層程式碼
        ’直接給文字框賦值
        Dim studentinfo As New Entity.EN_StudentInfo
        studentinfo.CardNo = Trim(txtCardNo.Text)
        Dim dt As New List(Of Entity.EN_StudentInfo)
        Dim checkbalance As New Facade.FacadeCheckBalance
        dt = checkbalance.CheckBalance(studentinfo)

        txtClass.Text = dt(0).Classes  '0表示泛型集合中的第一個實體
        txtStudentNo.Text = dt(0).StudentNo
        txtName.Text = dt(0).StudentName
        txtSex.Text = dt(0).Sex
        txtStatus.Text = dt(0).Status
        txtGrade.Text = dt(0).Grade
        txtBalance.Text = dt(0).Cash
        txtExplain.Text = dt(0).Explain
    End Sub

  ’和DataGridView控制元件互動

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim studentinfo As New Entity.EN_StudentInfo
        studentinfo.CardNo = Trim(txtCardNo.Text)
        Dim dt As New List(Of Entity.EN_StudentInfo)
        Dim checkbalance As New Facade.FacadeCheckBalance
        dt = checkbalance.CheckBalance(studentinfo)

        dgvRecord.DataSource = dt
        dgvRecord.AutoGenerateColumns = True
        dgvRecord.Columns(1).HeaderText = "卡號"
    End Sub


相關推薦

VB.NET——集合的使用

   因為我們每次和資料庫互動都需要轉換為泛型,所以將這個方法抽象出來,放在D層一遍呼叫,和sqlhelper類的作用相似'********************************************** '說明:將DataTable轉化為泛型集合 '名稱空間:

vb.net & 集合-解決Datatable強耦合

     做基本資料設定窗體,本以為實現這個小小的窗體應該是最簡單的吧!不就是單擊修改按鈕,進行修改;然後單擊更新按鈕來對資料基本設定進行更新嗎?可是當一出手就遇到了問題,資料表中的資料該怎麼顯示在文字框中呢?這真的一下子難住了自己!不過遇到問題總會有解決的辦法。    

.NET中的集合總結

pro 顯示 接口 www 最重要的 div 類型 項目 .cn 最近對集合相關的命名空間比較感興趣,以前也就用下List<T>, Dictionary<Tkey, TValue>之類,總之,比較小白。點開N多博客,MSDN,StackOverflo

.net學習第十三天小結 集合,裝箱拆箱,鍵值對集合,FileStream,多

1.泛型集合List:確定了集合元素的型別,不進行裝箱拆箱. 2.裝箱:將值型別裝換為引用型別. 拆箱:將引用型別裝換為值型別 儘量避免裝箱拆箱. 3.鍵值對集合:Dictionary<int ,string> dic =new Dictionary<

三層架構中使用實體類填充集合代替DataTable解決方案(ASP.NET+C#)

用三層架構開發專案,經常會遇到如下場景:       D層負責與資料庫互動,一般是得到DataTable或DataSet物件,然後返回給B層,B層進行類似的處理來讀取資料:dt.Rows[0][“xxx”];或者dt.Rows[0][1];(強烈

集合的使用

column func prot 技術分享 empty 創建 sha 循環 sdn 對於機房收費系統的重構。從大的方面來看。無非就是對於數據庫的四個操作。增刪改查。而且我們用的是三層架構進行重構。D層用來和數據庫打交道。進行這四個操作就須要有返回值,增刪改在這裏

普通集合集合的區別,哈希表和字典表的區別,隊列和堆棧的區別以及堆和棧的區別。

ear 釋放內存 main 廣泛 棧內存 節點 except {0} 常數 普通集合和泛型集合的區別: 泛型集合與傳統集合相比 類型更安全. 泛型集合無需裝箱拆箱操作. 泛型的重要性. 泛型是未來五年的主流技術 ...通常情況下,建議您使用泛型集合,因為這樣可以獲得類型安全

快速入門系列--CLR--03集合

value mov nts readonly 只有一個 並且 cer view 工作 .NET中的泛型集合 在這裏主要介紹常見的泛型集合,很多時候其並發時的線程安全性常常令我們擔憂。因而簡述下.NET並發時線程安全特性,其詳情請見MSDN。 普通集合都不支持多重並發寫操

C#入門集合List<T>

div nbsp 需要 強制轉換 初始 cnblogs lsi 轉換 blog 泛型集合 List<T> List<T>泛型集合特點: <T>表示泛型,T是Type簡寫,表示當前不確定具體類型; 可以根據用戶的實際需要,確定當前集合需要

C#中Dictionary集合7種常見的用法

程序集 c# border adding 設置 type 其它 else ring 要使用Dictionary集合,需要導入C#泛型命名空間 System.Collections.Generic(程序集:mscorlib) Dictionary的描述1、從一組鍵(Key

DateTable轉化為集合

datatable prop logs val ring reat tor row setvalue public class ListUtil { public static List<T> ToList<T>(DataT

集合和非集合的區別

但是 array 存儲 數據類型的轉換 是的 array對象 編譯期 都沒有 nbsp 他們倆個,一個是弱類型,一個是強類型。 而弱類型是指無法在應用程序編譯期間得到檢查,如array對象,你可以往這個對象中添加數字和字符都沒有問題。但是在遍歷操作的時候可能會牽扯到數據類型

DataSet裝換為集合

DataSet裝換為泛型集合/// <summary> /// DataSet裝換為泛型集合 /// </summary> /// <typeparam name="MoDeviceAbnormalStateRecord"></typeparam&

集合

強制轉換 通過 cti AD clas 引用 安全性 最大限度 ict 1:ArrayList 非常類似於數組,也有人稱他為數組列表,ArrayList可以動態維護。數組的容量是固定的,而ArraysList的容量可以根據需要自動擴充。 給ArrayList添加數據:通過A

集合

數量 add time 字典 gen 支持 engines 出現 clr ArrayList arry = new ArrayList(); arry.Add("小明"); arry.Add("小D");

我在北京寫代碼 寫出心中悲與喜 寫出人間的悲歡離合 歡迎閱讀 我的第三章 使用集合組織相關數據(集合

nes -s ear 插入元素 資源管理 底層 動態 用途 key) ArrayList arry = new ArrayList(); arry.Add("小明"); arry.Add("小D"); arr

LinQ操作集合List<T>中的常用方法

proc lambda表達式 shadow ado ext 分享圖片 jpg reac 常用 1 Find()方法:也可以使用lambda表達式,會更加簡潔一點這兩個代碼完全是等價的都是返回年齡>20中的第一個元素。只是用lambda表達式更加簡潔一點。上面用的是委托

2018-10-14 Dictionary集合之基本使用

1.Dictionary集合是一種“鍵值對”集合。 每個資料都是有兩部分組成-“鍵”  “值”。 在字典集合中,我們是根據“鍵”去找值,這一點和List<T>不同。 在字典集合中,鍵必須是唯一的,而值是可以有重複的。 List<T>泛型集合,我們只限

2018-10-12 LIst集合之使用者管理系統

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _2018_10_12_LIst泛型集合之使用

集合集合問題

非泛型集合的使用例項   假設我們建立了非泛型的System.Collections.ArrayList來儲存數值(分配在棧上的)資料,查詢ArrayList成員,就會發現它們所操作的是System.Object資料: public class ArrayList:... {