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

二进制文件填充DataGridView仅生成行列无内容的解决方法

解决DataGridView绑定二进制读取数据后单元格无内容的问题

问题根源分析

你的代码能生成正确行数但单元格无数据,核心原因通常有两个:

  • Cliente类属性访问权限不足:DataGridView仅能绑定公共(public)属性,若你的Cliente类字段是私有或内部访问级别,控件无法读取数据。
  • ArrayList是弱类型数据源:ArrayList存储的是object类型,DataGridView无法自动识别Cliente的属性信息,导致绑定失效。

具体修复步骤

1. 确保Cliente类的属性为公共可访问

检查并修改Cliente类定义,必须将属性声明为public,示例如下:

public class Cliente
{
    public string codigoCliente { get; set; }
    public string nome { get; set; }
    public string nif { get; set; }
    public string email { get; set; }

    public Cliente(string codigo, string nome, string nif, string email)
    {
        this.codigoCliente = codigo;
        this.nome = nome;
        this.nif = nif;
        this.email = email;
    }
}

2. 将ArrayList替换为强类型的List

把原来的clientes变量类型从ArrayList改为List<Cliente>,强类型数据源能让DataGridView更准确地识别属性:

// 替换原来的ArrayList声明
private List<Cliente> clientes = new List<Cliente>();

3. 优化DataGridView绑定逻辑

设置DataSource前先重置为null,确保控件强制刷新:

dataGridViewClientes.DataSource = null;
dataGridViewClientes.DataSource = clientes;

修复后的完整代码片段

private void button3_Click(object sender, EventArgs e)
{
    using (OpenFileDialog localizarArquivoDialog = new OpenFileDialog())
    {
        localizarArquivoDialog.Filter = "Arquivos Binários (*.bin)|*.bin";
        localizarArquivoDialog.DefaultExt = "bin";

        DialogResult resultado = localizarArquivoDialog.ShowDialog();
        if (resultado == DialogResult.OK)
        {
            caminhoArquivo = localizarArquivoDialog.FileName;

            // 清空强类型列表
            clientes.Clear();

            using (FileStream fs = new FileStream(caminhoArquivo, FileMode.Open))
            {
                using (BinaryReader reader = new BinaryReader(fs))
                {
                    while (reader.BaseStream.Position < reader.BaseStream.Length)
                    {
                        string codigoCliente = reader.ReadString();
                        string nome = reader.ReadString();
                        string nif = reader.ReadString();
                        string email = reader.ReadString();
                        Cliente cliente = new Cliente(codigoCliente, nome, nif, email);
                        clientes.Add(cliente);
                    }
                }
            }

            // 配置DataGridView列
            dataGridViewClientes.AutoGenerateColumns = false;
            dataGridViewClientes.Columns.Clear();

            dataGridViewClientes.Columns.Add("codigoCliente", "Código Cliente");
            dataGridViewClientes.Columns["codigoCliente"].DataPropertyName = "codigoCliente";

            dataGridViewClientes.Columns.Add("nome", "Nome");
            dataGridViewClientes.Columns["nome"].DataPropertyName = "nome";

            dataGridViewClientes.Columns.Add("nif", "NIF");
            dataGridViewClientes.Columns["nif"].DataPropertyName = "nif";

            dataGridViewClientes.Columns.Add("email", "Email");
            dataGridViewClientes.Columns["email"].DataPropertyName = "email";
            
            // 重置并绑定数据源
            dataGridViewClientes.DataSource = null;
            dataGridViewClientes.DataSource = clientes;
        }
        else
        {
            caminhoArquivo = "";
            MessageBox.Show("Nenhum arquivo selecionado.");
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:13:26