系列最終篇:提供使用 `XmlNodeReader` 讀取 XML 並繫結至 `ListView` 的完整 WinForms 程式碼,並總結 C# 與 XML 整合要點。
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
currentElement = reader.Name;
break;
case XmlNodeType.Text:
if (currentElement == "Name")
item = listView.Items.Add(reader.Value);
else
item.SubItems.Add(reader.Value);
break;
}
}
`XmlNodeType.Element` 記錄當前元素名稱,`XmlNodeType.Text` 取得文字內容並依元素名決定加入主項或子項。
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Xml;
public class Form1 : Form
{
private Button btnRead;
private ListView lvData;
public Form1()
{
InitializeComponent();
}
private void InitializeComponent()
{
btnRead = new Button { Text = "讀取 XML", Location = new Point(240, 296), Size = new Size(112, 37) };
btnRead.Click += BtnRead_Click;
lvData = new ListView
{
Location = new Point(10, 9), Size = new Size(623, 269),
View = View.Details, GridLines = true, FullRowSelect = true
};
lvData.Columns.AddRange(new[]
{
new ColumnHeader { Text = "Name", Width = 80 },
new ColumnHeader { Text = "Zip", Width = 80 },
new ColumnHeader { Text = "Address", Width = 80 },
new ColumnHeader { Text = "City", Width = 80 },
new ColumnHeader { Text = "State", Width = 80 }
});
ClientSize = new Size(648, 348);
Controls.AddRange(new Control[] { lvData, btnRead });
Text = "C# 讀取 XML 示範";
}
private void BtnRead_Click(object sender, EventArgs e)
{
lvData.Items.Clear();
string currentElement = "";
ListViewItem item = null;
try
{
var doc = new XmlDocument();
doc.Load(@"C:\data.xml");
using (var reader = new XmlNodeReader(doc))
{
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
currentElement = reader.Name;
break;
case XmlNodeType.Text:
if (currentElement == "Name")
item = lvData.Items.Add(reader.Value);
else
item?.SubItems.Add(reader.Value);
break;
}
}
}
}
catch (Exception ex)
{
MessageBox.Show($"讀取失敗: {ex.Message}");
}
}
[STAThread]
static void Main() => Application.Run(new Form1());
}
Ma Jin Hu
239000
Feng Huang Street
Chu Zhou City
ANHUI
Wang Tian
239000
Lang Ya Street
He Fei City
ANHUI
Zou Wen Biao
100000
Sai Di Street
Bei Jin City
Bei Jin
掌握這三種模型並根據資料量、存取模式選型,即能高效處理 .NET 中的 XML 需求。