在.Net FrameWork SDK中定義了許多組件,Visual C#就是通過獲得這些組件的實例來豐富自己的界面的。列表(ListView)是程序設(shè)計中一個常用的組件,由于其自身的特點,往往被使用顯示比較龐大的數(shù)據(jù)信息。本文就是利用他的這個特點來看看它如何來顯示數(shù)據(jù)記錄。
一. 程序設(shè)計和運行的環(huán)境
(1).微軟視窗2000專業(yè)版本
(2)..Net FrameWork SDK Beta 2
(3).Microsoft Data Acess Component 2.6 (MDAC2.6)
二. 程序設(shè)計的具體思路
(1).首先要建立數(shù)據(jù)連接,打開數(shù)據(jù)集
(2).對列表進(jìn)行初始化,并使得列表的顯示條件符合數(shù)據(jù)記錄的條件
(3).對數(shù)據(jù)集中的數(shù)據(jù)記錄進(jìn)行遍歷,在遍歷中添加記錄到列表中
(4).關(guān)閉數(shù)據(jù)集,關(guān)閉數(shù)據(jù)連接
三. 具體的實現(xiàn)步驟
(1).首先要建立數(shù)據(jù)連接,打開數(shù)據(jù)集
對于如何建立數(shù)據(jù)連接和獲得數(shù)據(jù)集的內(nèi)容可以參考本站的一篇文章--《在Visual C#中訪問不同的數(shù)據(jù)庫》,在此文中對此類問題有比較詳細(xì)的介紹,本文就不多敘述,具體實現(xiàn)語句如下:
// 定義數(shù)據(jù)連接的字符串,程序中使用的是Acess 2000數(shù)據(jù)庫 private static string strConnect = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + Application.StartupPath + "\\MY.MDB" ; private OleDbConnection conConnection = new OleDbConnection ( strConnect ) ; OleDbDataReader reader ; // 獲得Person里面的所以數(shù)據(jù)記錄 string strCommand = "SELECT * FROM Persons" ; this.conConnection.Open ( ) ; // 打開數(shù)據(jù)連接 OleDbCommand cmd = new OleDbCommand ( strCommand , conConnection ) ; reader = cmd.ExecuteReader ( ) ; file://獲得數(shù)據(jù)集 |
(2).對列表進(jìn)行初始化,并使得列表的顯示條件符合數(shù)據(jù)記錄的條件。需要說明的是在下面源代碼中,lv是在Class中定義的一個ListView的一個實例
// 初始化ListView lv = new ListView ( ) ; lv.Left = 0 ; lv.Top = 0 ; lv.Width = 700 ; lv.Height = this.ClientRectangle.Height ; lv.GridLines = true ; file://顯示各個記錄的分隔線 lv.FullRowSelect = true ; file://要選擇就是一行 lv.View = View.Details ; file://定義列表顯示的方式 lv.Scrollable = true ; file://需要時候顯示滾動條 lv.MultiSelect = false ; // 不可以多行選擇 lv.HeaderStyle = ColumnHeaderStyle.Nonclickable ; // 針對數(shù)據(jù)庫的字段名稱,建立與之適應(yīng)顯示表頭 lv.Columns.Add ( "姓名" , 60 , HorizontalAlignment.Right ) ; lv.Columns.Add ( "住宅電話" , 100 , HorizontalAlignment.Left ) ; lv.Columns.Add ( "辦公電話" , 100 , HorizontalAlignment.Left ) ; lv.Columns.Add ( "移動電話" , 100 , HorizontalAlignment.Left ) ; lv.Columns.Add ( "居住地點" , 100 , HorizontalAlignment.Left ) ; lv.Columns.Add ( "工作單位" , 100 , HorizontalAlignment.Left ) ; lv.Columns.Add ( "電子郵件" , 100 , HorizontalAlignment.Left ) ; lv.Visible = true ; |
(3).對數(shù)據(jù)集中的數(shù)據(jù)記錄進(jìn)行遍歷,在遍歷中添加記錄到列表中。
可以利用數(shù)據(jù)集中的Read ( )方法,來實現(xiàn)對數(shù)據(jù)記錄的遍歷,Read ( )方法是首先指向首數(shù)據(jù)記錄,并判斷從此記錄是否為尾記錄,如果不是則返回false,如果是則返回true。并且如果不是尾記錄則自動把數(shù)據(jù)指針移到下一條記錄上,然后在判斷此記錄是否是尾記錄,如此循環(huán),直至到尾記錄為止。根據(jù)此可設(shè)計以下代碼:
while ( reader.Read ( ) ) { ListViewItem li = new ListViewItem ( ) ; li.SubItems.Clear ( ) ; li.SubItems[0].Text = reader["name"].ToString ( ) ; li.SubItems.Add ( reader["HomePhone"].ToString ( ) ) ; li.SubItems.Add ( reader["WorkPhone"].ToString ( ) ) ; li.SubItems.Add ( reader["MobilePhone"].ToString ( ) ) ; li.SubItems.Add ( reader["City"].ToString ( ) ) ; li.SubItems.Add ( reader["Address"].ToString ( ) ) ; li.SubItems.Add ( reader["Email"].ToString ( ) ) ; lv.Items.Add ( li ) ; } |
(4). 關(guān)閉數(shù)據(jù)集,關(guān)閉數(shù)據(jù)連接。
關(guān)閉數(shù)據(jù)集和關(guān)閉數(shù)據(jù)連接是很容易的,只要調(diào)用這二個對象的Close()方法即可,也只要調(diào)用在程序中具體如下:
reader.Close ( ) ; file://關(guān)閉數(shù)據(jù)集 this.conConnection.Close ( ) ; // 關(guān)閉數(shù)據(jù)連接 |
四. 程序運行結(jié)果界面和程序源代碼(list.cs) :
程序源代碼:
using System ; using System.Windows.Forms ; using System.Drawing ; using System.Data ; using System.Data.OleDb ; class MainForm : Form { // 定義數(shù)據(jù)連接的字符串 private static string strConnect = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + Application.StartupPath + "\\MY.MDB" ; private OleDbConnection conConnection = new OleDbConnection ( strConnect ) ; private ListView lv ; public MainForm ( ) { // 初始化Form this.Left = 0 ; this.Top = 0 ; this.Text = "在ListView中顯示數(shù)據(jù)庫內(nèi)容!" ; // 初始化ListView lv = new ListView ( ) ; lv.Left = 0 ; lv.Top = 0 ; lv.Width = 700 ; lv.Height = this.ClientRectangle.Height ; lv.GridLines = true ; file://顯示各個記錄的分隔線 lv.FullRowSelect = true ; file://要選擇就是一行 lv.View = View.Details ; file://定義列表顯示的方式 lv.Scrollable = true ; file://需要時候顯示滾動條 lv.MultiSelect = false ; // 不可以多行選擇 lv.HeaderStyle = ColumnHeaderStyle.Nonclickable ; // 針對數(shù)據(jù)庫的字段名稱,建立與之適應(yīng)顯示表頭 lv.Columns.Add ( "姓名" , 60 , HorizontalAlignment.Right ) ; lv.Columns.Add ( "住宅電話" , 100 , HorizontalAlignment.Left ) ; lv.Columns.Add ( "辦公電話" , 100 , HorizontalAlignment.Left ) ; lv.Columns.Add ( "移動電話" , 100 , HorizontalAlignment.Left ) ; lv.Columns.Add ( "居住地點" , 100 , HorizontalAlignment.Left ) ; lv.Columns.Add ( "工作單位" , 100 , HorizontalAlignment.Left ) ; lv.Columns.Add ( "電子郵件" , 100 , HorizontalAlignment.Left ) ; lv.Visible = true ; OleDbDataReader reader ; string strCommand = "SELECT * FROM Persons" ; this.conConnection.Open ( ) ;// 打開數(shù)據(jù)連接 OleDbCommand cmd = new OleDbCommand ( strCommand , conConnection ) ; reader = cmd.ExecuteReader ( ) ;//獲得數(shù)據(jù)集 // 不斷往列表中添加數(shù)據(jù)記錄 while ( reader.Read ( ) ) { ListViewItem li = new ListViewItem ( ) ; li.SubItems.Clear ( ) ; li.SubItems[0].Text = reader["name"].ToString ( ) ; li.SubItems.Add ( reader["HomePhone"].ToString ( ) ) ; li.SubItems.Add ( reader["WorkPhone"].ToString ( ) ) ; li.SubItems.Add ( reader["MobilePhone"].ToString ( ) ) ; li.SubItems.Add ( reader["City"].ToString ( ) ) ; li.SubItems.Add ( reader["Address"].ToString ( ) ) ; li.SubItems.Add ( reader["Email"].ToString ( ) ) ; lv.Items.Add ( li ) ; } reader.Close ( ) ; // 關(guān)閉數(shù)據(jù)集 // 在Form中添加此列表 this.Controls.Add ( lv ) ; // 關(guān)閉Form的時候,同時也關(guān)閉數(shù)據(jù)連接 this.Closed+=new EventHandler ( this_Closed ) ; } protected void this_Closed ( object sender , EventArgs eArgs ) { this.conConnection.Close ( ) ; file://關(guān)閉數(shù)據(jù)連接 } public static void Main ( ) { Application.Run ( new MainForm ( ) ) ; } } |
在成功編譯了上面源程序代碼以后,在同一目錄下建立一個Acess 2000的數(shù)據(jù)庫,命名為MY.MDB,然后在其中建立一張數(shù)據(jù)表,字段如下:name,HomePhone,WorkPhone,MobilePhone,City,Address,Email。此時運行編譯后的程序就可以得到如下運行界面:
圖01:用ListView顯示數(shù)據(jù)記錄 |
五. 對于其他數(shù)據(jù)庫如何處理
對于其他數(shù)據(jù)庫也需要用ListView來顯示數(shù)據(jù)記錄,和上面的一個主要區(qū)別在于建立不同的數(shù)據(jù)字符串,下面就以SQL Server 7.0為例來簡要說明:
如果訪問的數(shù)據(jù)庫是SQL Server 7.0,只需要把上面源代碼中的一條語句:
private static string strConnect = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + Application.StartupPath + "\\MY.MDB" ; |
改變成:
private static string strConnect = "Provider=SQLOLEDB.1 ; Persist Security Info=False ; User ID = sa ; Initial Catalog=數(shù)據(jù)庫名稱; Data Source = 服務(wù)器名稱 " ; |
即可。
六. 總結(jié)
本文試圖用另外一種方法來顯示數(shù)據(jù)記錄,雖然在使用的時候比起正常的方法要煩瑣
些,但有更高的靈活度,并且也使得我們對于ListView組件的具體使用有了具體的和更高的認(rèn)識。