You need to enable JavaScript to run this app. 从Cassandra数据库填充DataGridView时仅显示一行的问题排查
优惠活动
大模型
产品
解决方案
定价
更多

从Cassandra数据库填充DataGridView时仅显示一行的问题排查

代码核心问题定位
  • 循环判断条件书写错误:原代码中循环判断写为for (int i = 0; 2 < 3; i++),判断条件2 < 3恒为真,既没有绑定实际需要遍历的行范围,属于逻辑完全失效的死循环写法,大概率是编写时手滑将判断条件里的变量i误写为字面量2。
  • 单元格赋值逻辑错位:内层循环中,对同一位置的单元格连续执行4次赋值操作,依次写入staff_id、username、password、name四个字段,每次赋值都会覆盖上一次的内容,最终每个单元格只会留存name字段的值,无法实现不同列对应不同字段的展示效果。
  • 行索引与数据库记录脱钩:foreach遍历数据库返回结果时,循环内的i值从未随遍历进度动态更新,所有从数据库读取到的记录,都会被反复赋值到固定索引的行位置,没有为后续读取到的记录创建对应的DataGridView行承载,最终界面只会留存最后一次覆盖写入的单行内容。
修正后的实现代码
public void show_db()
{
    var cluster = Cluster.Builder().AddContactPoint("127.0.0.1").Build();
    var session = cluster.Connect("hotel");
    RowSet rs = session.Execute("SELECT * FROM hotel.staff");

    // 清空原有行,避免重复加载出现冗余内容
    staff_info.Rows.Clear();

    foreach (var res in rs)
    {
        // 每读取一条数据库记录,新增一行DataGridView行
        int newRowIndex = staff_info.Rows.Add();
        // 按列索引匹配对应字段赋值
        staff_info.Rows[newRowIndex].Cells[0].Value = res.GetValue<string>("staff_id");
        staff_info.Rows[newRowIndex].Cells[1].Value = res.GetValue<string>("username");
        staff_info.Rows[newRowIndex].Cells[2].Value = res.GetValue<string>("password");
        staff_info.Rows[newRowIndex].Cells[3].Value = res.GetValue<string>("name");
    }
}
关键改动说明
  • 移除无意义的双层硬嵌套循环,避免固定索引反复覆盖的问题
  • 建立数据库记录与DataGridView行的一一对应关系,每读取一条查询结果就创建对应行
  • 按列的实际顺序匹配对应字段赋值,避免同一单元格被多字段反复覆盖
  • 增加行清空逻辑,避免多次调用方法时出现重复加载的冗余数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 12:54:08