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

ASP.NET Web Forms SortedList 集合繫結:自動排序鍵值對、RadioButtonList 動態選單實作

     編輯:ASP.NET 基礎

ASP.NET Web Forms SortedList 集合繫結:自動排序鍵值對、RadioButtonList 動態選單實作

SortedList 結合 ArrayList 索引存取與 Hashtable 鍵值對特性,**自動依鍵值排序**(字母或數字順序),是建構有序下拉選單、單選群組的理想集合類別。本文示範 SortedList 建立、資料繫結、事件處理完整流程。

SortedList 核心特性

  • 命名空間:System.Collections
  • 內部維護兩個陣列:keys[] 與 values[],依 key 排序
  • 鍵值不可為 null,鍵值不可重複
  • 支援索引存取(list[index])與鍵值存取(list[key])
  • Add(key, value) 新增項目並自動排序
  • TrimToSize() 釋放未使用容量

完整實作範例:國家選單

後端程式碼

<script runat="server">
    void Page_Load() {
        if (!IsPostBack) {
            // 建立 SortedList 並新增項目(自動依 Key 排序:F, I, N, S)
            SortedList countries = new SortedList();
            countries.Add("N", "挪威");
            countries.Add("S", "瑞典");
            countries.Add("F", "法國");
            countries.Add("I", "義大利");
            
            // 繫結至 RadioButtonList
            rblCountries.DataSource = countries;
            rblCountries.DataTextField = "Value";   // 顯示國家名稱
            rblCountries.DataValueField = "Key";    // 實際值為代碼
            rblCountries.DataBind();
        }
    }
    
    void rblCountries_SelectedIndexChanged(object sender, EventArgs e) {
        lblResult.Text = "您最喜歡的國家:" + rblCountries.SelectedItem.Text + 
                         " (代碼:" + rblCountries.SelectedValue + ")";
    }
</script>

前端宣告

<html><body>
<form runat="server">
    <h3>請選擇您最喜歡的國家:</h3>
    <asp:RadioButtonList ID="rblCountries" runat="server" 
        AutoPostBack="true" 
        OnSelectedIndexChanged="rblCountries_SelectedIndexChanged"
        RepeatDirection="Vertical">
    </asp:RadioButtonList>
    <br /><br />
    <asp:Label ID="lblResult" runat="server" ForeColor="Green" Font-Bold="true" />
</form>
</body></html>

執行結果順序

因自動排序,選單顯示順序為:法國 (F)、義大利 (I)、挪威 (N)、瑞典 (S)

SortedList 進階操作

索引存取與修改

SortedList list = new SortedList();
list.Add("C", "第三");
list.Add("A", "第一");
list.Add("B", "第二");

// 索引存取(依排序後順序:0=A, 1=B, 2=C)
string first = list.GetByIndex(0);     // "第一"
string key0 = list.GetKey(0);          // "A"

// 修改值
list["B"] = "第二(已修改)";           // 透過 Key 修改
list.SetByIndex(1, "第二(索引修改)");  // 透過索引修改

搜尋與檢查

bool hasKey = list.ContainsKey("A");      // true
bool hasValue = list.ContainsValue("第一"); // true
int index = list.IndexOfKey("B");         // 1
int indexV = list.IndexOfValue("第二");    // 1

移除項目

list.Remove("A");        // 依 Key 移除
list.RemoveAt(0);        // 依索引移除
list.Clear();            // 清空所有

SortedList vs Hashtable vs Dictionary 比較

特性SortedListHashtableDictionary<TKey,TValue>SortedDictionary<TKey,TValue>
自動排序是(依 Key)否否是(依 Key)
型別安全否(object)否(object)是(泛型)是(泛型)
效能:插入/查詢O(n) / O(log n)O(1) / O(1)O(1) / O(1)O(log n) / O(log n)
記憶體效率高(陣列)中中較高(樹狀)
索引存取支援不支援不支援不支援
適用 .NET 版本1.0+1.0+2.0+2.0+
推薦使用場景小量資料需排序、需索引存取舊版專案相容一般鍵值對、高效能大量資料需排序、頻繁插入

繫結至其他清單控制項

同一個 SortedList 可繫結至所有清單控制項:

<asp:DropDownList ID="ddlCountries" runat="server" 
    DataSourceID="sdsCountries" DataTextField="Value" DataValueField="Key" />

<asp:CheckBoxList ID="cblCountries" runat="server" 
    DataSourceID="sdsCountries" DataTextField="Value" DataValueField="Key" />

<asp:ListBox ID="lbCountries" runat="server" 
    DataSourceID="sdsCountries" DataTextField="Value" DataValueField="Key" />

現代化替代方案:泛型集合 + LINQ 排序

.NET 2.0+ 建議使用強型別泛型集合:

<script runat="server">
    void Page_Load() {
        if (!IsPostBack) {
            // 使用 Dictionary + LINQ OrderBy 排序
            var countries = new Dictionary<string, string> {
                {"N", "挪威"}, {"S", "瑞典"}, {"F", "法國"}, {"I", "義大利"}
            };
            
            // 依 Key 排序並轉為 List 繫結
            var sorted = countries.OrderBy(kvp => kvp.Key).ToList();
            
            rblCountries.DataSource = sorted;
            rblCountries.DataTextField = "Value";
            rblCountries.DataValueField = "Key";
            rblCountries.DataBind();
        }
    }
</script>

優點:型別安全、IntelliSense 支援、LINQ 查詢彈性、效能更好。

常見問題排查

  • 重複 Key 例外:ArgumentException,確保 Add 前檢查 ContainsKey 或使用索引器 list[key] = value 覆蓋
  • Null Key 例外:ArgumentNullException,SortedList 不允許 null Key
  • 排序不符預期:預設使用 Comparer.Default(區分大小寫字串比較),可建構函數傳入自訂 IComparer
  • 大量資料效能:SortedList 插入為 O(n),頻繁插入大量資料建議改用 SortedDictionary 或 List<T> 最後排序

SortedList 以自動排序特性簡化有序選單建構,配合清單控制項繫結機制,是 ASP.NET Web Forms 快速開發的實用工具。下一節將介紹 Hashtable 集合繫結應用。

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