列表頁點擊「修改」,將對應記錄數據回填到表單,其中省份下拉框需根據數據庫存儲的 ProvinceID 自動選中對應項。
// 假設綁定數據 ID 從 1 開始,DropDownList 索引從 0 開始
this.DropDownListProvince.SelectedIndex = pro.ID - 1;
前提:綁定數據順序固定,且 ID 連續無縺隙。一旦數據順序變更或存在刪除導致 ID 不連續,此法失效。
// 通過數據值精確查找並選中
ListItem item = this.DropDownListProvince.Items.FindByValue(pro.ID.ToString());
if (item != null) {
this.DropDownListProvince.ClearSelection();
item.Selected = true;
}
優勢:不依賴綁定順序,不要求 ID 連續,只要 Value 匹配即可精準定位,健壯性強。
<asp:Repeater ID="RepeaterList" runat="server" OnItemCommand="RepeaterList_ItemCommand">
<ItemTemplate>
<asp:LinkButton Text="修改" CommandName="Edit" CommandArgument='<%# Eval("ID") %>' runat="server" />
</ItemTemplate>
</asp:Repeater>
// 後台
protected void RepeaterList_ItemCommand(object source, RepeaterCommandEventArgs e) {
if (e.CommandName == "Edit") {
int id = Convert.ToInt32(e.CommandArgument);
Province pro = GetList().Find(p => p.ID == id);
LiteralID.Text = pro.ID.ToString();
LiteralLevel.Text = pro.Pid.ToString();
// 推薦用法
ListItem li = DropDownListProvince.Items.FindByValue(pro.ID.ToString());
if (li != null) { DropDownListProvince.ClearSelection(); li.Selected = true; }
}
}
DataBind() 會重置選中狀態,賦值操作必須在 DataBind 之後Items.Clear() 或判斷 !IsPostBackToString()