首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET Web Forms XML 資料繫結:DataSet 讀取 XML、RadioButtonList 動態繫結與事件處理

     編輯:ASP.NET 基礎

ASP.NET Web Forms XML 資料繫結:DataSet 讀取 XML、RadioButtonList 動態繫結與事件處理

ASP.NET 提供原生 XML 支援,透過 DataSet.ReadXml() 將 XML 檔案載入記憶體資料集,再繫結至清單控制項(RadioButtonList、DropDownList、CheckBoxList、ListBox),實現資料與介面分離、動態選單維護零程式碼修改。

XML 資料來源準備

countries.xml

<?xml version="1.0" encoding="utf-8"?>
<countries>
  <country>
    <text>台灣</text>
    <value>TW</value>
  </country>
  <country>
    <text>日本</text>
    <value>JP</value>
  </country>
  <country>
    <text>美國</text>
    <value>US</value>
  </country>
  <country>
    <text>德國</text>
    <value>DE</value>
  </country>
</countries>

完整繫結流程:RadioButtonList 範例

1. 匯入命名空間

<%@ Import Namespace="System.Data" %>

2. Page_Load 讀取 XML 並繫結

<script runat="server">
    void Page_Load() {
        if (!IsPostBack) {
            DataSet ds = new DataSet();
            ds.ReadXml(Server.MapPath("~/App_Data/countries.xml"));
            
            rblCountries.DataSource = ds;
            rblCountries.DataTextField = "text";    // 顯示文字欄位
            rblCountries.DataValueField = "value";  // 實際值欄位
            rblCountries.DataBind();
        }
    }
    
    // 選項變更事件
    void rblCountries_SelectedIndexChanged(object sender, EventArgs e) {
        lblMessage.Text = "您選擇的國家:" + rblCountries.SelectedItem.Text + 
                          " (值:" + rblCountries.SelectedValue + ")";
    }
</script>

3. 前端控制項宣告

<html><body>
<form runat="server">
    <h3>請選擇國家:</h3>
    <asp:RadioButtonList ID="rblCountries" runat="server" 
        AutoPostBack="true" 
        OnSelectedIndexChanged="rblCountries_SelectedIndexChanged"
        RepeatDirection="Vertical"
        RepeatColumns="2"
        RepeatLayout="Table">
    </asp:RadioButtonList>
    
    <br /><br />
    <asp:Label ID="lblMessage" runat="server" ForeColor="Blue" Font-Bold="true" />
</form>
</body></html>

關鍵屬性解析

屬性用途範例值
DataSource資料來源(DataSet、DataTable、DataView、ArrayList 等)ds
DataTextField顯示給使用者看的文字欄位名稱"text"
DataValueField表單提交時的實際值欄位名稱"value"
DataBind()執行繫結動作,將資料來源轉換為 ListItem 集合-
AutoPostBack選項變更時自動回傳表單觸發伺服器事件true
OnSelectedIndexChanged選項變更事件處理函數"rblCountries_SelectedIndexChanged"
RepeatDirection排列方向:Vertical(垂直)或 Horizontal(水平)Vertical
RepeatColumns欄數(配合 RepeatLayout=Table 使用)2
RepeatLayoutTable(表格)、Flow(流式)、OrderedList、UnorderedListTable

支援 XML 繫結的清單控制項

  • RadioButtonList:單選按鈕群組
  • CheckBoxList:多選核取方塊群組
  • DropDownList:下拉式選單
  • ListBox:清單方塊(支援多選 SelectionMode="Multiple")
  • BulletedList:項目符號清單(DisplayMode="Text"/"LinkButton"/"HyperLink")

進階 XML 結構與 XPath 繫結

若 XML 結構較複雜,可使用 XmlDataSource 控制項搭配 XPath 查詢:

複雜 XML 範例

<?xml version="1.0" encoding="utf-8"?>
<products>
  <category id="1" name="電子產品">
    <item id="101" name="筆記型電腦" price="30000" />
    <item id="102" name="智慧型手機" price="25000" />
  </category>
  <category id="2" name="家電">
    <item id="201" name="冰箱" price="45000" />
    <item id="202" name="洗衣機" price="35000" />
  </category>
</products>

XmlDataSource + XPath 繫結

<asp:XmlDataSource ID="xdsProducts" runat="server" 
    DataFile="~/App_Data/products.xml" 
    XPath="products/category[@id='1']/item" />

<asp:DropDownList ID="ddlElectronics" runat="server" 
    DataSourceID="xdsProducts"
    DataTextField="name"
    DataValueField="id" />

動態更新 XML 資料來源

新增/修改/刪除 XML 節點後重新繫結:

void AddCountry(string text, string value) {
    DataSet ds = new DataSet();
    ds.ReadXml(Server.MapPath("~/App_Data/countries.xml"));
    
    DataRow newRow = ds.Tables["country"].NewRow();
    newRow["text"] = text;
    newRow["value"] = value;
    ds.Tables["country"].Rows.Add(newRow);
    
    ds.WriteXml(Server.MapPath("~/App_Data/countries.xml")); // 寫回檔案
    
    // 重新繫結
    rblCountries.DataSource = ds;
    rblCountries.DataBind();
}

XML vs 資料庫 vs 記憶體集合:選擇指南

場景推薦資料來源理由
靜態選單(國家、縣市、分類)XML 檔案易維護、無需資料庫、版控友善
頻繁異動、多使用者並存資料庫交易支援、並發控制、查詢彈性
單一請求內運算產生的選項List/Array/DataTable效能最佳、無 I/O 開銷
跨系統整合、API 回應XML/JSON 反序列化標準交換格式

常見問題排查

  • 繫結後無資料:檢查 XML 檔案路徑、DataTextField/DataValueField 拼寫是否與 XML 元素名稱完全一致(區分大小寫)
  • 重複資料:確認 !IsPostBack 判斷,避免 PostBack 重複繫結覆蓋使用者選擇
  • 特殊字元顯示異常:XML 中特殊字元需轉義(& → &amp;、< → &lt;、> → &gt;、' → &apos;、" → &quot;)
  • 大量 XML 效能問題:DataSet 將整份 XML 載入記憶體,大檔案建議使用 XmlReader 串流處理或改用資料庫

XML 資料繫結是 ASP.NET Web Forms 快速建構動態選單的利器,配合 XmlDataSource 與 XPath 更能處理複雜階層資料。下一節將介紹 SortedList、Hashtable、ArrayList 等集合類別直接繫結至清單控制項。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved