WPF C# DataGrid首列无法填充,其余列正常显示求助
解决WPF DataGrid首列无法显示数据的问题
问题原因
你的DataTable首列名称包含特殊字符/,WPF DataGrid自动生成列时,无法正确解析带特殊字符的列名,导致首列绑定失败、无法显示数据。
解决方案
方案1:手动定义DataGrid列(推荐)
在XAML中关闭自动生成列,手动指定每一列的绑定路径,对于带特殊字符的列名,使用[列名]格式绑定:
<DataGrid x:Name="dataGridBayley4" HorizontalAlignment="Left" Height="315" Margin="76,131,0,0" VerticalAlignment="Top" Width="638" SelectedIndex="0" Grid.RowSpan="1" Grid.ColumnSpan="1" Grid.Row="1" Grid.Column="1" AutoGenerateColumns="False"> <DataGrid.Columns> <!-- 带特殊字符的列用[列名]格式绑定 --> <DataGridTextColumn Header="Subtest/Subdomain" Binding="{Binding [Subtest/Subdomain]}" /> <DataGridTextColumn Header="Standard & Scaled Scores" Binding="{Binding [Standard & Scaled Scores]}" /> <DataGridTextColumn Header="Percentile" Binding="{Binding Percentile}" /> <DataGridTextColumn Header="Description" Binding="{Binding Description}" /> </DataGrid.Columns> </DataGrid>
方案2:修改DataTable列名,移除特殊字符
如果不需要保留原列名,可以修改列名去掉特殊字符,让自动生成列正常工作:
DataTable dt = new DataTable(); // 修改列名,移除特殊字符 dt.Columns.Add("SubtestSubdomain"); dt.Columns.Add("StandardScaledScores"); dt.Columns.Add("Percentile"); dt.Columns.Add("Description"); dt.Rows.Add("1","2","3","4"); dataGridBayley4.ItemsSource = dt.DefaultView;
方案3:强制设置首列宽度
如果首列是因为默认宽度被设为0导致不显示,可以在DataGrid加载后手动设置宽度:
dataGridBayley4.Loaded += (sender, e) => { if (dataGridBayley4.Columns.Count > 0) { // 设置为自动宽度,或指定固定宽度 dataGridBayley4.Columns[0].Width = DataGridLength.Auto; // 或者 dataGridBayley4.Columns[0].Width = new DataGridLength(150); } };
验证说明
你通过MessageBox.Show(dt[0][0])能看到数据,说明DataTable本身数据正常,问题出在DataGrid的列绑定环节,方案1能彻底解决特殊字符导致的绑定问题,是最可靠的做法。
内容的提问来源于stack exchange,提问作者Charles Johnson
相关产品推荐
相关产品推荐

