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

ComboBox数据无法存库,CheckedListBox仅存最后一项问题求助

问题解决思路

1. CheckedListBox 仅保存最后一项的问题

你的猜测方向是对的,不需要数组,直接通过字符串拼接就能解决循环覆盖的问题:

  • 当前代码中Days = itemChecked.ToString();每次循环都会覆盖之前的值,最终只会保留最后一个选中项。
  • 改进方式:用string.Join一次性拼接所有选中项,或者在循环里累加字符串(记得处理分隔符)。

示例代码:

// 推荐用string.Join,写法更简洁
string Days = string.Join(",", chDay.CheckedItems.Cast<object>().Select(item => item.ToString()));

// 或者用循环累加的方式
string Days = "";
foreach (object itemChecked in chDay.CheckedItems)
{
    if (!string.IsNullOrEmpty(Days))
        Days += ","; // 添加分隔符,避免开头或结尾多余逗号
    Days += itemChecked.ToString();
}

2. ComboBox 数据无法保存的问题

当前代码cmbCoash.SelectedItem.ToString()得到的是DataRowView对象的类型字符串(不是实际的name值),所以存入数据库的是无效内容。正确的取值方式有两种:

  • 方式一:利用SelectedValue(你已经设置了ValueMember = "name",直接取即可)
string Coash = cmbCoash.SelectedValue?.ToString() ?? "";
  • 方式二:从SelectedItem(本质是DataRowView)中直接提取字段值
string Coash = "";
if (cmbCoash.SelectedItem is DataRowView rowView)
{
    Coash = rowView["name"].ToString();
}

重要提醒:修复SQL注入漏洞

你当前用字符串拼接生成SQL语句的方式存在严重安全风险,必须改用参数化查询:

conn.Open();
string query = "INSERT INTO public.groupfit (name, type, trainingdays, сoach, total) VALUES(@Name, @Type, @TrainingDays, @Coach, @Total)";

NpgsqlCommand nCommand = new NpgsqlCommand(query, conn);
nCommand.Parameters.AddWithValue("@Name", txtName.Text);
nCommand.Parameters.AddWithValue("@Type", txtType.Text);
nCommand.Parameters.AddWithValue("@TrainingDays", Days);
nCommand.Parameters.AddWithValue("@Coach", Coash);
nCommand.Parameters.AddWithValue("@Total", chDay.CheckedItems.Count);

nCommand.ExecuteNonQuery();
conn.Close();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:35:04