C#/ WPF:工具包的DataGrid - 转置行和列(C#/WPF: Toolkit Data

2019-07-19 06:30发布

我有一个

List<DetailObject> 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 =“真”),为的rowHeader和其他成员为“行”内容“的字符串影片名称”的价值? 无需做任何修改,它会告诉我“影片名称”为的columnHeader和影片名称作为行的值,DITO的“值1”为的columnHeader和行等值1的值(一个或多个)

谢谢你的帮助!

干杯

编辑:为了更好的理解,这是我

[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

Answer 1:

您可以使用RowHeaderTemplate这样的:

<toolkit:DataGrid>
  <toolkit:DataGrid.RowHeaderTemplate>
    <DataTemplate>
      <TextBlock Text="{Binding Item.Titel, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type toolkit:DataGridRow}}}"/>
    </DataTemplate>
  </toolkit:DataGrid.RowHeaderTemplate>
</toolkit:DataGrid>

你也必须设置AutoGenerateColumnsfalse和创建自己的列,以避免Titel财产也被显示为一列。

编辑

我现在明白了,你要转的DataGrid 。 我觉得很容易,但有点“哈克”解决方案是创建“换位”对象的列表。 要做到这一点,你必须预先知道有多少对象有在原来的列表,然后创建因为有对象的许多属性的新类。

class TransposedDetailObject {
  public String Column1 { get; set; }
  public String Column2 { get; set; }
  public String Column3 { get; set; }
}

var transposedList new List<TransposedDetailObject> {
  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
  },
  ...
};

一个不太“哈克”的解决方案是修改的控制模板DataGrid交换行和列。 然而, DataGrid是一个复杂的控制,它可以是一个有点势不可挡修改控件模板。



Answer 2:

这个线程是有点老,但也许有人仍感兴趣......我也一直在寻找方法来转一个WPF DataGrid中,终于我发现下面的开源项目在CodePlex上:

换位WPF的DataGrid

希望这可以帮助。



Answer 3:

转换业务对象的名单到您从对象的属性创建列,并设置为你的DataGrid的的ItemSource的DataTable。 如果要启用编辑,那么你就必须要遍历数据表和手动应用值回你的业务对象。 反射可以帮助电网通用。 只是一些想法。



Answer 4:

我觉得更清洁的方法是使用ItemsControl ,而不是DataGrid为您的方案。

按照上的说明这个博客帖子和创建自己ItemTemplate了最大程度的控制。 通过这种方式,你可以为每个列的模板(可以是一个DataGrid本身)。



文章来源: C#/WPF: Toolkit DataGrid - Transpose rows and columns