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

如何实现数据库列表项在ListBox中每行显示一个?

解决ListBox加载逗号分隔数据无法分行显示的问题

我来帮你排查下问题所在:你现在的代码里,先把数据库返回的整串逗号分隔文本直接添加到了ListBox里(就是Listbox1.Items.Add(dtbl.Rows[0][0]);这行),然后后面尝试用Listbox1.Text.ToString().Split(...)来拆分,但Listbox1.Text其实是ListBox当前选中项的文本,不是你刚添加的那串数据,这就导致两个问题:一是ListBox里先多了一个整串的条目,二是拆分逻辑根本没拿到正确的数据源。

接下来是修正后的代码,我会加上注释说明关键改动:

private void ItemCBx_SelectedIndexChanged(object sender, EventArgs e)
{
    Listbox1.Items.Clear(); // 先清空原有内容
    MAcon.Open();
    
    OleDbDataAdapter da = new OleDbDataAdapter("Select Process from [Product Family] Where [Product Name] = @ProductName", MAcon);
    da.SelectCommand.Parameters.AddWithValue("@ProductName", ItemCBx.SelectedItem.ToString());
    
    DataTable dtbl = new DataTable();
    da.Fill(dtbl);
    
    if (dtbl.Rows.Count == 1)
    {
        // 获取数据库里的逗号分隔字符串,先判断是否为空,避免空引用报错
        string processStr = dtbl.Rows[0][0]?.ToString() ?? string.Empty;
        if (!string.IsNullOrEmpty(processStr))
        {
            // 按逗号拆分,去除每个条目的前后空格,再批量添加到ListBox
            var processList = processStr.Split(',').Select(item => item.Trim()).ToList();
            Listbox1.Items.AddRange(processList.ToArray());
        }
    }
    
    MAcon.Close();
    Listbox1.Show();
    // Define.SelectedIndex = 1; // 这行如果需要可以保留,根据你的业务逻辑调整
}

关键改动点:

  • 移除了Listbox1.Items.Add(dtbl.Rows[0][0]);这行,避免先添加整串无效数据
  • 新增空值判断逻辑,防止数据库字段为空时触发空引用异常
  • 拆分字符串后用AddRange批量添加条目,比循环Add更高效
  • 拆分后自动去除每个条目的前后空格,避免显示时出现多余空白

这样处理后,数据库里的逗号分隔数据就能在ListBox里每个条目单独占一行显示啦~

内容的提问来源于stack exchange,提问作者Linda T

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:19:40