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

C# DataGridView绑定SQLite时布尔字段complete取值恒为true问题

问题根因
  • 核心问题1:你给出的Jobs表建表SQL中根本没有定义存储complete状态的布尔字段,全表仅存在jStructuralCalc一个布尔字段,总计13个列,对应DataGridView自动生成的绑定列索引范围为0~12。你代码中读取的Cells[13]是你手动在设计器添加的未绑定复选框列,不属于数据源绑定列。
  • 直接原因:未绑定的DataGridView复选框列默认不会自动将UI层的勾选状态同步到单元格Value属性,如果没有编写额外事件逻辑做值同步,该列的Value会始终保持创建时的默认值(你当前环境下默认值为true),因此无论界面上勾选状态是什么,读取Value转布尔永远返回true。而structCalc是绑定到数据源jStructuralCalc字段的绑定列,值会和数据源自动同步,因此读取逻辑正常。
修复方案
  1. 先给SQLite的Jobs表补充缺失的布尔字段,执行如下SQL:
    ALTER TABLE Jobs ADD COLUMN jComplete BOOLEAN DEFAULT 0;
    
  2. 删除手动添加的未绑定complete列,重新执行RefreshGrid()方法,让DataGridView自动生成绑定到jComplete字段的列,此时jComplete会作为最后一列(索引13),直接读取即可获取正确值。
  3. (推荐优化)不要用固定数字索引读取单元格值,避免后续增减列、调整列顺序时出现索引错位,改用列名定位单元格,示例代码:
    // 替换原固定索引读取逻辑,通过列名定位
    selectedRecord.structCalc = Convert.ToBoolean(dataGridView1.Rows[rowIndex].Cells["jStructuralCalc"].Value);
    selectedRecord.complete = Convert.ToBoolean(dataGridView1.Rows[rowIndex].Cells["jComplete"].Value);
    
  4. 如果确实需要保留未绑定列,需要添加CellValueChanged事件逻辑,将用户编辑后的值同步到单元格Value属性,或开启虚拟模式统一处理值的存取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:48:14