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
相关产品推荐
相关产品推荐

