使用匿名类型集合在WPF中填充DataGrid

时间:2011-05-31 20:49:30

标签: c# wpf datagrid datacontext anonymous-types

我正在使用匿名类型的集合填充datagrid(我正在设置DataGrid's DataContext属性)。而且没有错误。并且在datagrid中没有任何内容。我已尝试使用已定义的对象集合进行相同的操作,但同样没有显示任何内容。请问你能告诉我该怎么做。

谢谢!

编辑1

确定。我试图设置ItemsSource属性,它的工作原理。但是我得到了奇怪的结果..

enter image description here

编辑2

我不知道怎么但是在3D发布之后它现在正常工作?

private void ShowABCResultsButtonOnClick(Object sender, RoutedEventArgs e)
{
    var anonArray = new List<NormalizedResult> 
    { 
        new NormalizedResult
        { 
            Key = 1,
            Title = "Колос", 
            Volume = 1322.01m,
            Weighted = 6.7840m,
            Result = 6.7840m,
            Group = "A"
        },
        new NormalizedResult
        { 
            Key = 2,
            Title = "Украинский Новый", 
            Volume = 1250.47m,
            Weighted = 6.4169m,
            Result = 13.2009m,
            Group = "A"
        },
        new NormalizedResult
        { 
            Key = 3,
            Title = "Ржано-Пшеничный", 
            Volume = 1202.1m,
            Weighted = 6.1687m,
            Result = 19.3695m,
            Group = "A"
        }
    };

    this.dataGrid2.ItemsSource = anonArray;
}

这是我的代码。

我再次启动..它只是第三次显​​示正确吗?



3 个答案:

答案 0 :(得分:7)

你可能需要做两件事。第一个as @Tim suggested将查询分配给DataGrid.ItemsSource属性。

myDataGrid.ItemsSource = from a in x
                         select new { Prop1 = a.A, Prop2 = a.B, ... };

第二位将在DataGrid上启用自动列生成:

<DataGrid x:Name="myDataGrid"
          AutoGenerateColumns="True" />

<击>

编辑:我使用自动列生成和带有vanilla LINQ查询的匿名类型重新创建了您的图片。所以需要可以使用显式列来使用或切换到真实类型。

<DataGrid x:Name="myDataGrid"
          AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Property 1"
                            Binding="{Binding Prop1}"/>
        <DataGridTextColumn Header="Property 2"
                            Binding="{Binding Prop2}"/>
    </DataGrid.Columns>
</DataGrid>

编辑2 :您可以使用AutoGenerateColumns="True",但不能使用IEnumerable<T>,其中T是匿名类型。通过添加ToList,问题就会消失。

myDataGrid.ItemsSource = (from m in typeof(int).GetMethods()
                          select new
                          {
                              Name = m.Name,
                              ReturnType = m.ReturnType.FullName
                          }).ToList();

然后XAML回到:

<DataGrid x:Name="myDataGrid"
          AutoGenerateColumns="True" />

答案 1 :(得分:5)

非常确定您应该设置DataGrid的ItemsSource

答案 2 :(得分:2)

请确保在数据网格中绑定匿名对象时使用相同的属性名称,并确保该集合包含项目。