从目录获取文件名并在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
相关产品推荐
相关产品推荐

