You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 09:36:14