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

CheckedListBox插入数据库出现System.Data.DataRowView问题求助

解决CheckedListBox插入数据库出现"System.Data.DataRowView"的问题

我来帮你搞定这个困扰!你遇到的问题其实很常见——当CheckedListBox绑定数据源后,列表里的每一项本质是DataRowView对象,如果你直接把选中项对象插入数据库而没有提取实际字段值,就会把这个对象的默认字符串表示(也就是"System.Data.DataRowView")存进去,选中几个就插几个,完全匹配你描述的情况。

问题根源

你的代码在插入数据时,没有正确从DataRowView中提取CHIPSET表的实际字段值,而是直接把整个DataRowView对象当作插入值了。

具体解决方案

1. 确保CheckedListBox绑定数据源时正确设置DisplayMember和ValueMember

首先检查你绑定CHIPSET数据到CheckedListBox的代码,必须指定显示给用户的列(DisplayMember)和实际要操作的列(ValueMember),比如:

// 假设你从DB类获取CHIPSET表的DataTable
DataTable chipsetTable = db.GetChipsetData();
checkedListBox1.DataSource = chipsetTable;
// 替换成你CHIPSET表中用于显示的列名,比如"ChipsetName"
checkedListBox1.DisplayMember = "ChipsetName";
// 替换成你需要插入到数据库的列名,比如"ChipsetID"或"ChipsetName"
checkedListBox1.ValueMember = "ChipsetID";

这一步是基础,设置后才能正确提取到实际值。

2. 修改插入代码,提取实际字段值

遍历选中项时,把每个项转换为DataRowView,然后提取对应的字段值再插入数据库:

// 假设你的数据库连接已经打开
foreach (var checkedItem in checkedListBox1.CheckedItems)
{
    DataRowView rowView = checkedItem as DataRowView;
    if (rowView != null)
    {
        // 提取你需要插入的字段值,比如这里取ValueMember对应的列值
        string chipsetValue = rowView[checkedListBox1.ValueMember].ToString();
        // 或者直接指定列名:rowView["ChipsetName"].ToString()

        // 执行插入操作(示例)
        string insertSql = "INSERT INTO YourTargetTable (TargetColumn) VALUES (@ChipsetValue)";
        using (SqlCommand cmd = new SqlCommand(insertSql, connection))
        {
            cmd.Parameters.AddWithValue("@ChipsetValue", chipsetValue);
            cmd.ExecuteNonQuery();
        }
    }
}

3. 避免直接将item对象传入参数

检查你之前的插入代码,是不是有类似这样的错误:

// 错误示例:直接把item对象传入参数
cmd.Parameters.AddWithValue("@Chipset", checkedItem);

这种写法就会把DataRowView对象转成字符串,导致插入"System.Data.DataRowView",一定要替换成提取后的实际字段值。

按照上面的步骤修改后,应该就能正确插入CHIPSET表的实际数据了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:16:23