一,顯示實體的全部屬性
當DataGridView的列名就是Class T的屬性的時候,這時,只需要綁定數據源,然后手動更改列名就好。
<span style="font-size:14px;"> '將dt轉換為泛型集合 myList = EntityHelper.convertToList(Of EntityUser)(dt) TextBox1.Text = myList.Count '在文本框里面顯示出查詢到的教師數目 If (myList.Count > 0) Then '如果查詢到記錄 ''''將查詢到的數據顯示到DataGridView中 myDataGrid.DataSource = myList '設置控件的數據源:但是這樣設置還不夠,因為列的名字顯示出來還是英文的,所以,還應該設置沒列的名字。 '修改列名 myDataGrid.Columns(0).HeaderText = "卡號" myDataGrid.Columns(1).HeaderText = "密碼" myDataGrid.Columns(2).HeaderText = "教師姓名" myDataGrid.Columns(3).HeaderText = "教師級別" myDataGrid.Columns(4).HeaderText = "注冊日期" myDataGrid.Columns(5).HeaderText = "注冊時間" myDataGrid.Columns(6).HeaderText = "注銷日期" myDataGrid.Columns(7).HeaderText = "注銷時間" myDataGrid.Columns(8).HeaderText = "上機狀態" Else MsgBox("沒有查詢到任何記錄!") End If</span>
顯示結果如下:
二,顯示Class T 的部分屬性
有時候,我們並不是要顯示T 的全部屬性,只需要顯示一部分,比如,我們在顯示教師信息的時候,可能不需要顯示教師的密碼,這時候該怎么辦呢?
方法一: 加載完所有數據后手動移除列
如上圖中,如果我想移除密碼這一列,只需在加載完所有數據后,再加上一句代碼:
'加載完所有數據后手動移除密碼這一列
myDataGrid.Columns.Remove("Pwd")
當再次顯示,結果就如下圖:
雖然也能實現想要的效果,但是總感覺這么做有點兒雷,就好像吃了東西再吐出來那樣,反正我是不用。還是看看別的方法吧。
方法二:設置DataPropertyName屬性
例如,我現在只想顯示用戶名,首先,右擊窗體上的DataGridView控件,然后選擇編輯列:
添加一個叫用戶名的列,然后設置列的DataPropertyName屬性,通過這個屬性,可以設置綁定到實體的某個屬性值,datatable的某個列等。 這里的 DataPropertyName 值要跟實體的屬性名對應 。
之后,我們在代碼里面寫入
<span style="font-size:18px;"> myDataGrid.AutoGenerateColumns = False '不允許自動添加列 myDataGrid.DataSource = myList '設置數據源</span>
--如果是數據庫查詢出來的list轉換為列表table
datapropertyname應該為轉換表的字段(不區分大小寫) 這樣就ok了~
運行下,可以看到這種效果:
小結:
真心感覺DataGridView這個空間非常好用,直接綁定數據源就可以顯示數據。
而且如果在D層,查詢完成之后,就將datatable轉化為實體集,當結果傳到U層DataGridView顯示的時候,直接指定dataSource為實體集合,那么,整個過程沒有像以前vb中MSHFlexGrid控件那樣:
這個過程每次都要一行一行的賦值,避免了filds屬性在指定時出錯的問題,而且代碼更簡潔了,我們的工作量也大大減少了。