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

ASP.NET DropDownList 動態資料綁定五大實戰場景完解

     編輯:ASP.NET 基礎

前言

DropDownList 是 Web Forms 最常用的下拉選單控制項。資料來源可能來自陣列、資料庫、DataReader、DataSet 甚至自訂物件。本文系統整理五種主流綁定場景,涵蓋宣告式與程式碼後置雙重示範,並強調 IsPostBack 判斷、資源釋放等實務細節。

場景一:簡易集合綁定


// 後置碼
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        var items = new List { "台北", "台中", "高雄" };
        ddlCity.DataSource = items;
        ddlCity.DataBind();
    }
}

// 前台 .aspx

場景二:手動添加 ListItem(靜態選項)


protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        ddlPriority.Items.Add(new ListItem("高", "3"));
        ddlPriority.Items.Add(new ListItem("中", "2"));
        ddlPriority.Items.Add(new ListItem("低", "1"));
    }
}

適用於固定選項(如優先級、狀態碼),避免資料庫查詢開銷。

場景三:DataReader 逐筆綁定(舊版專案常見)


protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        string connStr = ConfigurationManager.ConnectionStrings["DB"].ConnectionString;
        using (var conn = new SqlConnection(connStr))
        using (var cmd = new SqlCommand("SELECT DeptId, DeptName FROM Departments", conn))
        {
            conn.Open();
            using (var dr = cmd.ExecuteReader())
            {
                while (dr.Read())
                {
                    ddlDept.Items.Add(new ListItem(dr["DeptName"].ToString(), dr["DeptId"].ToString()));
                }
            }
        }
    }
}

優點:記憶體佔用低,適合大量資料;缺點:需手動管理連線生命週期,程式碼較冗長。

場景四:DataSet / DataTable 綁定(企業級標準做法)


protected void BindDepartments()
{
    string sql = "SELECT DeptId, DeptName FROM Departments WHERE IsActive = 1";
    using (var da = new SqlDataAdapter(sql, connStr))
    {
        var ds = new DataSet();
        da.Fill(ds, "Depts");
        ddlDept.DataSource = ds.Tables["Depts"];
        ddlDept.DataTextField = "DeptName";   // 顯示文字
        ddlDept.DataValueField = "DeptId";    // 實際值
        ddlDept.DataBind();
    }
}

關鍵屬性:

  • DataTextField:對應顯示欄位
  • DataValueField:對應值欄位(SelectedValue 取得)
  • AppendDataBoundItems="true":保留手動加入的首項「請選擇」

場景五:DataBinder.Eval 配合繫結運算式(Repeater/GridView 巢狀場景)

雖 DropDownList 少直接使用,但在 EditItemTemplate 中常見:



後置碼提供 GetRoles() 回傳 List<Role> 或 DataTable。

實務陷阱與最佳實踐

陷阱後果解決方案
未判斷 IsPostBack每次回傳重綁,導致使用者選擇被覆蓋包裹在 if (!IsPostBack) 區塊
DataReader 未關閉連線洩漏、連線池耗盡使用 using 區塊自動 Dispose
DataTextField/ValueField 拼錯顯示空白或例外對照 SQL 別名,區分大小寫
大量資料未分頁下拉選單渲染緩慢、ViewState 膨脹改用 AutoComplete / 搜尋式下拉元件

現代化替代方案

新專案建議採用 ASP.NET Core + Blazor / Razor Pages 搭配 select 標籤與 InputSelect<TValue>,或前端框架(Vue/React)元件,透過 Web API 非同步載入選項,體驗更佳。

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