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

从目录获取文件名并在DataGridView显示失败求助:仅显示Length

问题排查与解决方案

嘿,这个问题我太熟悉了!你遇到的情况是DataGridView绑定字符串数组时的默认行为导致的——因为字符串是引用类型,控件会自动反射它的公共属性,而Length是字符串最突出的属性,所以就只显示这个数值,完全没展示你要的文件名文本。

下面给你两个简单的解决办法:

方案1:用匿名类型包装文件名(推荐)

把每个文件名包装成带命名属性的匿名对象,这样DataGridView就能识别并显示你想要的列:

private void OdswiezOfer() 
{ 
    // 用Path.Combine替代手动拼接路径,更安全可靠
    string pathOO = Path.Combine(path, id_inv); 
    if (Directory.Exists(pathOO)) 
    { 
        var fileNames = Directory.GetFiles(pathOO)
                                 .Select(filePath => new { 文件名 = Path.GetFileName(filePath) })
                                 .ToList();
        dgvOfer.DataSource = fileNames; 
    } 
}

这样绑定后,DataGridView会自动生成名为“文件名”的列,显示的就是实际的文件名了。

方案2:手动构建列与行

如果你更习惯手动控制DataGridView的结构,可以先清空原有内容,再添加自定义列和行:

private void OdswiezOfer() 
{ 
    string pathOO = Path.Combine(path, id_inv);
    if (Directory.Exists(pathOO)) 
    { 
        // 清空现有列和行
        dgvOfer.Columns.Clear();
        dgvOfer.Rows.Clear();
        
        // 添加自定义列
        dgvOfer.Columns.Add("FileNameColumn", "文件名");
        
        // 遍历文件添加行
        foreach (var filePath in Directory.GetFiles(pathOO))
        {
            string fileName = Path.GetFileName(filePath);
            dgvOfer.Rows.Add(fileName);
        }
    } 
}

额外补充:点击单元格获取文件名

看你dgvOfer_CellContentClick的代码没写完,这里给你补全获取文件名的逻辑(以方案1为例):

private void dgvOfer_CellContentClick(object sender, DataGridViewCellEventArgs e) 
{ 
    // 排除点击表头的情况
    if (e.RowIndex >= 0)
    {
        var selectedRow = dgvOfer.Rows[e.RowIndex];
        string fileName = selectedRow.Cells["文件名"].Value.ToString();
        string id_inv = IdInv.Text;
        // 用Path.Combine拼接完整路径
        string filepath = Path.Combine(path, id_inv, fileName);
        
        // 这里写你后续要执行的逻辑,比如打开文件之类的
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 02:27:38