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

WPF中DataGrid显示多余列问题求助(C#)

问题原因

你遇到的列重复、多余内容显示问题,核心是WPF DataGrid的AutoGenerateColumns属性默认值为True:

  • 你通过代码手动添加了8列(对应CSV表头)
  • 设置ItemsSource时,DataGrid会自动遍历Campionato_calcio_2022_23_serie_A类的所有公共属性,再次生成列
  • 由于手动添加的列绑定路径(CSV表头名称)与类属性名不匹配,绑定失败后会显示对象的ToString()结果(即类全名Campionato_calcio_2022_23.Campionato_calcio_2022_23_serie_A),叠加自动生成的列后就出现了重复和多余内容。
解决步骤

1. 禁用自动列生成

在设置ItemsSource前,将DataGrid的AutoGenerateColumns设为False,阻止自动生成列:

// 在绑定数据源前添加这行代码
DataGrid1.AutoGenerateColumns = false;
DataGrid1.ItemsSource = lstPersonalList;

也可以直接在XAML中给DataGrid添加属性:

<DataGrid x:Name="DataGrid1" AutoGenerateColumns="False" />

2. 修正列绑定路径

确保手动添加的列绑定到类的实际属性名(而非CSV表头,除非两者完全一致)。如果CSV表头和类属性名有差异,需要做映射:

// 示例:CSV表头与类属性的映射关系,根据你的实际CSV内容调整
var columnPropertyMap = new Dictionary<string, string>
{
    {"CSV_ID列名", "ID"},
    {"CSV_主队列名", "Squadra_casa"},
    {"CSV_客队列名", "Squadra_fuoric"},
    // 补充其他列的映射...
};

// 创建列时使用映射后的属性名作为绑定路径
foreach (string lStrCell in lArrStrCells)
{
    DataGridTextColumn lDGCol = new DataGridTextColumn();
    lDGCol.Header = lStrCell;
    string propertyName = columnPropertyMap.ContainsKey(lStrCell) ? columnPropertyMap[lStrCell] : lStrCell;
    lDGCol.Binding = new System.Windows.Data.Binding(propertyName);
    DataGrid1.Columns.Add(lDGCol);
}

3. 额外优化

  • 移除无意义的MessageBox.Show(lObjStreamReader.ToString());,这行只会显示StreamReader的类型信息
  • 用using语句管理StreamReader,确保资源自动释放:
if (System.IO.File.Exists(fName))
{
    using (StreamReader lObjStreamReader = new StreamReader(fName))
    {
        lFnGenerateData(lObjStreamReader);
    } // 自动关闭流,无需手动调用Close()
}
最终效果

完成修改后,DataGrid只会显示你手动添加的8列,绑定类的属性值,不会再出现重复列和多余的类名内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 12:37:25