【问题标题】:Datagrid not showing data in wpf with c#Datagrid不使用c#在wpf中显示数据
【发布时间】:2015-05-12 15:04:32
【问题描述】:

我正在尝试在带有 c# 的 WPF 中使用 dataGrid。但是当我在调试模式下运行我的程序时,我无法让我的数据网格在表中显示我的任何数据。我在加载数据网格时执行此代码。但我看到的只是一个空旷的广场。

private void dataGrid1_Loaded(object sender, RoutedEventArgs e)
{
    var items = new List<SaveTable>();

    items.Add(new SaveTable("A" , 0));
    items.Add(new SaveTable("B" , 0));
    items.Add(new SaveTable("C" , 0));
    items.Add(new SaveTable("D" , 0));
    items.Add(new SaveTable("E" , 0));

    var grid = sender as DataGrid;
    grid.ItemsSource = items;    
}

我保存了一个名为 SaveTable 的类,如下所示:

class SaveTable
{

    public string Name { get; set; }
    public double Value { get; set; }

    public SaveTable(string name, double value)
    {
        this.Name = name;
        this.Value = value;
    }
}

我在网上得到了这种代码格式,似乎一切都正确?有什么建议吗?

这是该窗口的 xaml 代码

<Window x:Class="RobustCalculator.Storage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Storage" Height="499" Width="546" Activated="Window_Activated" Loaded="Window_Loaded">
<Grid>
    <TextBlock Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="textBlock1" Text="A" VerticalAlignment="Top" />
    <TextBox HorizontalAlignment="Left" Margin="24,10,0,306" Name="valueA" Width="120" TextChanged="valueA_TextChanged" />
    <TextBox Height="23" HorizontalAlignment="Left" Margin="24,39,0,0" Name="valueB" VerticalAlignment="Top" Width="120" TextChanged="valueB_TextChanged" />
    <TextBlock Height="20" HorizontalAlignment="Left" Margin="10,42,0,0" Name="textBlock2" Text="B" VerticalAlignment="Top" Width="20" />
    <TextBox Height="23" HorizontalAlignment="Left" Margin="24,71,0,0" Name="valueC" VerticalAlignment="Top" Width="120" TextChanged="valueC_TextChanged" />
    <TextBlock Height="23" HorizontalAlignment="Left" Margin="10,72,0,0" Name="textBlock3" Text="C" VerticalAlignment="Top" />
    <TextBlock Height="23" HorizontalAlignment="Left" Margin="10,101,0,0" Name="textBlock4" Text="D" VerticalAlignment="Top" />
    <TextBox Height="23" HorizontalAlignment="Left" Margin="24,98,0,0" Name="valueD" VerticalAlignment="Top" Width="120" TextChanged="valueD_TextChanged" />
    <TextBox Height="23" HorizontalAlignment="Left" Margin="24,130,0,0" Name="valueE" VerticalAlignment="Top" Width="120" TextChanged="valueE_TextChanged" />
    <TextBlock Height="23" HorizontalAlignment="Left" Margin="11,131,0,0" Name="textBlock5" Text="E" VerticalAlignment="Top" />
    <DataGrid AutoGenerateColumns="False" Height="200" HorizontalAlignment="Left" Margin="235,130,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="200" SelectionChanged="dataGrid1_SelectionChanged" Loaded="dataGrid1_Loaded" />
</Grid>

我添加了一个断点并且代码没有被执行。我正在使用 Loaded 事件,我应该使用其他事件吗?

【问题讨论】:

  • 你确认dataGrid1_Loaded被执行了吗?您的DataGrid XAML 看起来如何?您是手动定义列还是自动生成?您看到 5 个空行还是根本没有行?
  • 你能张贴标记吗?尝试将公共字段更改为属性。确保 AutoGenerateColumns 属性设置为 true。

标签: c# wpf xaml datagrid


【解决方案1】:

您的代码适用于 Loaded 事件,但此时您设置了 AutoGenerateColumns="False" 并且未定义列。您需要手动定义列

<DataGrid AutoGenerateColumns="False" ... Loaded="dataGrid1_Loaded">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Name}" Header="Name"/>
        <DataGridTextColumn Binding="{Binding Value}" Header="Value"/>
    </DataGrid.Columns>
</DataGrid>

或者让它自动生成列

<DataGrid AutoGenerateColumns="True" ... Loaded="dataGrid1_Loaded"/>

【讨论】:

  • 这非常有效。我将 autoGenerateColumns 设置为 true 并且它有效。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
相关资源
最近更新 更多