如何在C#后台代码中填充自定义多选ListBox用户控件
解决方案
1. 修改用户控件后台代码,暴露内部ListBox并添加必要方法
打开你的DropdownCheckboxList.ascx.cs文件,添加以下代码,让父页面能访问并操作控件内部的ListBox:
// 暴露内部ListBox的公共属性,供父页面直接操作 public ListBox InnerListBox { get { return ddlListBox; } } // 封装的绑定数据方法(可选,更符合控件封装原则) public void BindItems(List<ListItem> items) { ddlListBox.Items.Clear(); if (items != null && items.Count > 0) { ddlListBox.Items.AddRange(items.ToArray()); } } // 刷新jQuery Multiselect插件的方法,确保新选项生效 public void RefreshMultiselect() { ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "refreshMulti_" + this.ClientID, "$('[id*=ddlListBox]').multiselect('refresh');", true); }
2. 修改父页面后台代码,填充数据到用户控件
更新父页面的后台逻辑,直接操作用户控件的内部ListBox即可:
方式一:直接添加选项到内部ListBox
try { List<FormLookup> fal = DBPR.ABT.Tax.BO.FormLookup.FormLookupGetList(DBPR.ABT.Tax.BO.BoBase.MasterConnectionString); foreach(FormLookup listItem in fal) { // 创建ListItem并添加到用户控件的ListBox中 ddlchkProfession.InnerListBox.Items.Add(new ListItem(listItem.FormDescription, listItem.FormLookupId.ToString())); } // 刷新Multiselect插件,让新选项显示在下拉框中 ddlchkProfession.RefreshMultiselect(); } catch (Exception ee) { // 不要留空catch,记录异常方便排查 System.Diagnostics.Debug.WriteLine("填充职业下拉框失败:" + ee.Message + "\n" + ee.StackTrace); }
方式二:使用封装的绑定方法
try { List<FormLookup> fal = DBPR.ABT.Tax.BO.FormLookup.FormLookupGetList(DBPR.ABT.Tax.BO.BoBase.MasterConnectionString); List<ListItem> itemList = new List<ListItem>(); foreach(FormLookup listItem in fal) { itemList.Add(new ListItem(listItem.FormDescription, listItem.FormLookupId.ToString())); } // 调用用户控件的绑定方法 ddlchkProfession.BindItems(itemList); // 刷新插件 ddlchkProfession.RefreshMultiselect(); } catch (Exception ee) { System.Diagnostics.Debug.WriteLine("填充职业下拉框失败:" + ee.Message + "\n" + ee.StackTrace); }
3. 关键注意事项
- 不能直接往用户控件的
Controls集合添加ListItem,必须操作内部ListBox的Items集合,这才是存放选项的正确容器。 - 数据绑定完成后必须调用Multiselect的
refresh方法,否则插件无法识别新添加的选项,这是最容易忽略的点。 - 避免空catch块,记录异常信息能大幅降低排查问题的难度。
内容的提问来源于stack exchange,提问作者Unconquered82
相关产品推荐
相关产品推荐

