WPF DataGrid无法显示DataTable数据问题求助
WPF DataGrid无法显示DataTable数据的解决方法
问题情况
接触WPF已有3天,遇到DataGrid无法显示DataTable数据的问题。此前使用WinForms的DataGridView无此问题,尝试代码绑定和XAML绑定均无效。将DataGrid封装为独立UserControl关联主窗口时数据不显示,直接在主窗口测试问题依旧。
现有代码
MainWindow.xaml
<Border> <Grid> <Border Grid.Row="1" CornerRadius="20" Margin="15,0,15,15" > <!-- Apply Style with Rounded Corners to DataGrid --> <DataGrid IsReadOnly="True" x:Name="dataGrid" AutoGenerateColumns="False"> <DataGrid.Resources> <!-- Cell Background --> <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#121212"/> <!-- Cell Foreground (Text) --> <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="#FFFFFF"/> <!-- Grid Lines --> <SolidColorBrush x:Key="{x:Static SystemColors.InactiveBorderBrushKey}" Color="#1E1E1E"/> <!-- Header Background --> <SolidColorBrush x:Key="{x:Static SystemColors.ControlDarkDarkBrushKey}" Color="#2E2E2E"/> <!-- Header Foreground (Text) --> <SolidColorBrush x:Key="{x:Static SystemColors.ControlLightLightBrushKey}" Color="#FFFFFF"/> </DataGrid.Resources> <DataGrid.Style> <Style TargetType="DataGrid"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type DataGrid}"> <Border Background="{TemplateBinding Background}" CornerRadius="20"> <ScrollViewer> <!-- ContentPresenter displays the actual DataGrid content --> <ContentPresenter/> </ScrollViewer> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style> </DataGrid.Style> </DataGrid> </Border> </Grid> </Border>
MainWindow.xaml.cs
public partial class MainWindow : Window { private DataTable dataTable; public MainWindow() { InitializeComponent(); InitializeDataGridAsync(); } private async void InitializeDataGridAsync() { var newDT = CreateDataTable(); // Simulate a delay for loading data (replace this with your actual data loading logic) await Task.Delay(3000); // Set the DataTable as the DataGrid's ItemsSource dataGrid.ItemsSource = newDT.DefaultView; } private DataTable CreateDataTable() { // Create a DataTable with columns dataTable = new DataTable("MyDataTable"); // Add 10 sample columns for (int i = 1; i <= 100; i++) { dataTable.Columns.Add($"Column{i}", typeof(int)); } // Add 100 rows of sample data for (int row = 1; row <= 100; row++) { // Create an array to hold values for each column object[] values = new object[100]; // Assign sample values to each column for (int col = 0; col < 100; col++) { values[col] = row * 100 + col + 1; // You can change this to your desired data } // Add the row to the DataTable dataTable.Rows.Add(values); } return dataTable; } }
问题截图

问题原因及解决方法
1. 自定义ControlTemplate错误
你替换了DataGrid的默认模板,仅使用ContentPresenter无法正确渲染DataGrid的内容。DataGrid的默认模板包含DataGridColumnHeadersPresenter(表头)和ItemsPresenter(数据行容器)等核心元素,这些是显示数据的关键。
修复后的模板示例:
<Style TargetType="DataGrid"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type DataGrid}"> <Border Background="{TemplateBinding Background}" CornerRadius="20" Padding="1"> <ScrollViewer Focusable="false" Padding="{TemplateBinding Padding}"> <StackPanel> <!-- 表头 --> <DataGridColumnHeadersPresenter x:Name="PART_ColumnHeadersPresenter" Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Column}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource TemplatedParent}}"/> <!-- 数据行容器 --> <ItemsPresenter x:Name="PART_ItemsPresenter"/> </StackPanel> </ScrollViewer> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style>
2. 列配置问题
你设置了AutoGenerateColumns="False",但没有手动定义任何列,即使数据绑定成功也无法看到内容。解决方式二选一:
- 将
AutoGenerateColumns改为True,让WPF自动根据DataTable的列生成DataGrid列:<DataGrid IsReadOnly="True" x:Name="dataGrid" AutoGenerateColumns="True"> - 手动添加列(示例,可根据实际列名调整):
<DataGrid.Columns> <DataGridTextColumn Header="Column1" Binding="{Binding Column1}"/> <DataGridTextColumn Header="Column2" Binding="{Binding Column2}"/> <!-- 更多列... --> </DataGrid.Columns>
验证步骤
- 先移除自定义的ControlTemplate,将
AutoGenerateColumns设为True,运行程序看数据是否显示。 - 确认数据显示正常后,再逐步添加自定义样式和模板,避免一次性修改过多导致问题难以排查。
内容的提问来源于stack exchange,提问作者Vasant Raval
相关产品推荐
相关产品推荐

