如何实现数据库列表项在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
相关产品推荐
相关产品推荐

