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

C# .NET 8.0操作Access数据库:ComboBox加载报‘列不存在’错误

解决ComboBox读取Access数据回显时「Column 'XXX' does not belong to table」错误

问题场景

  • 技术栈:C# + .NET 8.0,依赖Microsoft.Data.SqlClient、System.Data.OleDb NuGet包开发应用
  • 核心功能:实现PDF表单信息导入Access数据库,新增通过Access表填充3个ComboBox控件(Status、Special、Priority)
  • 异常表现:数据输入、ComboBox选项填充流程均正常,但读取数据库数据回显表单时,Status控件可正常加载,Special和Priority控件抛出错误:Column 'Special' does not belong to table

排查过程

  1. 反复验证Access表中Special、Priority列名的拼写及大小写,确认与代码中引用完全一致
  2. 尝试复用其他正常控件(如UOM)的赋值逻辑,问题未解决
  3. 改用DataRowView匹配逻辑后,仅Status控件生效,Special、Priority仍报相同错误

解决方案

问题根源:ComboBox的选项数组存储结构导致无法通过列名直接匹配,需改用ItemArray[0]获取选项值进行匹配。

错误代码示例(原逻辑)

// 原错误写法:试图通过列名匹配ComboBox项
foreach (DataRowView item in cboSpecial.Items)
{
    if (item["Special"].ToString() == dr["Special"].ToString())
    {
        cboSpecial.SelectedItem = item;
        break;
    }
}

修正后代码示例

// 修正后:使用ItemArray[0]获取选项值进行匹配
foreach (DataRowView item in cboSpecial.Items)
{
    if (item.Row.ItemArray[0].ToString() == dr["Special"].ToString())
    {
        cboSpecial.SelectedItem = item;
        break;
    }
}

补充说明

当ComboBox通过单列表格的DataTable绑定填充时,选项对应的DataRowView存在索引映射问题,无法直接通过列名访问值,此时通过ItemArray[0]直接获取行的第一列值是更可靠的匹配方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 16:14:51