承接上篇文章,本文將詳細說明如何將資料庫查詢結果繫結至 ListView 控制項,包含資料遍歷、列表項目建立、欄位對應與完整程式碼實作。
while (reader.Read())
{
ListViewItem item = new ListViewItem();
item.SubItems.Clear();
// 設定第一欄 (主項目)
item.SubItems[0].Text = reader["name"].ToString();
// 新增後續欄位 (子項目)
item.SubItems.Add(reader["HomePhone"].ToString());
item.SubItems.Add(reader["WorkPhone"].ToString());
item.SubItems.Add(reader["MobilePhone"].ToString());
item.SubItems.Add(reader["City"].ToString());
item.SubItems.Add(reader["Address"].ToString());
item.SubItems.Add(reader["Email"].ToString());
// 加入 ListView
lv.Items.Add(item);
}
關鍵點:ListViewItem 的第一欄使用 SubItems[0] 設定,後續欄位使用 SubItems.Add() 新增。
reader.Close(); // 關閉 DataReader
this.connConnection.Close(); // 關閉資料庫連線
using System;
using System.Windows.Forms;
using System.Drawing;
using System.Data;
using System.Data.OleDb;
class MainForm : Form
{
// 資料庫連線字串
private static string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
Application.StartupPath + "\\MY.MDB";
private OleDbConnection connConnection = new OleDbConnection(strConnect);
private ListView lv;
public MainForm()
{
// 表單初始化
this.Left = 0;
this.Top = 0;
this.Text = "在 ListView 中顯示資料庫內容!";
// ListView 初始化
lv = new ListView();
lv.Left = 0;
lv.Top = 0;
lv.Width = 700;
lv.Height = this.ClientRectangle.Height;
lv.GridLines = true; // 顯示分隔線
lv.FullRowSelect = true; // 整列選取
lv.View = View.Details; // 詳細檢視模式
lv.Scrollable = true; // 自動捲軸
lv.MultiSelect = false; // 單選模式
lv.HeaderStyle = ColumnHeaderStyle.Nonclickable; // 標題不可點擊
// 建立欄位標題 (對應資料庫欄位)
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;
// 查詢資料並填入 ListView
OleDbDataReader reader;
string strCommand = "SELECT * FROM Persons";
this.connConnection.Open();
OleDbCommand cmd = new OleDbCommand(strCommand, connConnection);
reader = cmd.ExecuteReader();
while (reader.Read())
{
ListViewItem item = new ListViewItem();
item.SubItems.Clear();
item.SubItems[0].Text = reader["name"].ToString();
item.SubItems.Add(reader["HomePhone"].ToString());
item.SubItems.Add(reader["WorkPhone"].ToString());
item.SubItems.Add(reader["MobilePhone"].ToString());
item.SubItems.Add(reader["City"].ToString());
item.SubItems.Add(reader["Address"].ToString());
item.SubItems.Add(reader["Email"].ToString());
lv.Items.Add(item);
}
reader.Close();
this.Controls.Add(lv);
// 表單關閉時關閉資料庫連線
this.Closed += new EventHandler(this_Closed);
}
protected void this_Closed(object sender, EventArgs e)
{
this.connConnection.Close();
}
public static void Main()
{
Application.Run(new MainForm());
}
}
MY.MDBPersons 資料表,欄位包含:name, HomePhone, WorkPhone, MobilePhone, City, Address, Email
| 技術點 | 說明 |
|---|---|
| View.Details | 啟用多欄詳細檢視模式 |
| FullRowSelect | 點選時反白整列,提升使用體驗 |
| GridLines | 顯示列分隔線,資料對齊更清晰 |
| SubItems 索引 | [0] 為主項目,[1] 起為子項目 |
| 事件關閉連線 | 在 Form.Closed 事件中釋放連線資源 |