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

C#读取二进制文件后DataGridView仅显示单个卖家数据问题

问题解决:DataGridView仅显示单个卖家数据

问题根源

你的代码存在两个关键问题导致仅显示一条数据:

  1. 循环内重复绑定数据源:每次添加一个卖家就执行dgvViewsäljare.DataSource = säljare;,频繁的重复绑定会干扰DataGridView的渲染逻辑,最终只保留最后一次绑定的视觉效果。
  2. 未清空绑定集合:仅清空DataGridView的行,而绑定的säljare集合未清空(如果之前有残留数据,还会导致数据叠加)。

修正后的代码

private void btn_öppna_Click(object sender, EventArgs e)
{
    DialogResult resultat = dlgÖppnaFil.ShowDialog();

    if (resultat == DialogResult.OK) {
        // 清空绑定集合,确保加载新数据前无残留
        säljare.Clear();

        // 使用using自动释放文件资源,避免手动Dispose的疏漏
        using (FileStream inStröm = new FileStream(dlgÖppnaFil.FileName, FileMode.Open, FileAccess.Read))
        using (BinaryReader läsare = new BinaryReader(inStröm))
        {
            int antalSäljare = läsare.ReadInt32();

            for (int i = 0; i < antalSäljare; i++) {
                string namn = läsare.ReadString();
                double personnr = läsare.ReadDouble();
                string distrikt = läsare.ReadString();
                int antal = läsare.ReadInt32();
                int nivå = läsare.ReadInt32();

                Säljare nySäljare = new Säljare(namn, personnr, distrikt, antal, nivå);
                säljare.Add(nySäljare);
            }
        }

        // 所有数据加载完成后,统一绑定数据源
        // 先设为null再绑定,解决List集合绑定的刷新问题
        dgvViewsäljare.DataSource = null;
        dgvViewsäljare.DataSource = säljare;
    }
}

额外优化建议

如果需要后续动态添加/删除卖家时,DataGridView自动更新显示,可以将säljare的类型从List<Säljare>改为BindingList<Säljare>,这类集合自带变更通知机制,无需手动重新绑定数据源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:20:30