C#/ WPF:Toolkit DataGrid – 转置行和列

我有一个

List someList; 

看起来像这样:

  public class DetailObject { public string Titel { get; set; } public int Value1 { get; set; } public int Value2 { get; set; } public int Value3 { get; set; } } 

有谁知道我如何使用(使用DataGrid.AutoGenerateColumns =“True”)’string Titel’的值作为RowHeader和其他成员作为“行”内容? 没有任何修改,它会显示“Titel”作为ColumnHeader并将Titel的值显示为行,将“Value1”的dito显示为ColumnHeader,将Value1的值显示为Rows等。

谢谢你的帮助!

干杯

编辑:为了更好地理解,这就是我所拥有的

 [Titel] [Value1] [Value2] [Value3] [Item1.Titel] [Item1.Value1] [Item1.Value2] [Item1.Value3] [Item2.Titel] [Item2.Value1] [Item2.Value2] [Item2.Value3] [Item3.Titel] [Item3.Value1] [Item3.Value2] [Item3.Value3] 

这就是我要找的东西:

 [Item1.Titel] [Item2.Titel] [Item3.Titel] [Item1.Value1] [Item2.Value1] [Item3.Value1] [Item1.Value2] [Item2.Value2] [Item3.Value2] [Item1.Value3] [Item2.Value3] [Item3.Value3] 

EDIT2:我在这里找到了一个不错的方法: http : //codemaverick.blogspot.com/2008/02/transpose-datagrid-or-gridview-by.html

您可以像这样使用RowHeaderTemplate

        

您还必须将AutoGenerateColumns设置为false并创建自己的列,以避免Titel属性也显示为列。

编辑

我现在明白你想要转置DataGrid 。 我认为简单但有些“hacky”的解决方案是创建一个“转置”对象列表。 要做到这一点,您必须事先知道原始列表中有多少个对象,然后创建一个具有与对象一样多的属性的新类。

 class TransposedDetailObject { public String Column1 { get; set; } public String Column2 { get; set; } public String Column3 { get; set; } } var transposedList new List { new TransposedDetailObject { Column1 = someList[0].Titel, Column2 = someList[2].Titel, Column3 = someList[3].Titel }, new TransposedDetailObject { Column1 = someList[0].Value1, Column2 = someList[2].Value1, Column3 = someList[3].Value1 }, ... }; 

一个不太“hacky”的解决方案是修改DataGrid的控件模板以交换行和列。 但是, DataGrid是一个复杂的控件,修改控件模板可能有点压倒性。

这个post有点旧,但也许有人仍然感兴趣…我也在寻找转换WPF DataGrid的方法,最后我在CodePlex上找到了以下开源项目:

转置的WPF DataGrid

希望这可以帮助。

将业务对象列表转换为您已从对象属性创建列的数据表,并将其设置为datagrid的itemsource。 如果要启用编辑,则必须迭代数据表并手动将值应用回业务对象。 reflection可能有助于使网格通用。 只是一些想法。

我认为更干净的方法是使用ItemsControl而不是DataGrid用于您的场景。

按照此博客文章中的说明创建您自己的ItemTemplate以获得最大程度的控制。 这样,您就可以为每个列创建一个模板(可以是Datagrid本身)。