Pergunta

Eu tenho um

List<DetailObject> someList;

que tem esta aparência:

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

Alguém sabe como posso usar (com DataGrid.AutoGenerateColumns = "True") o valor de 'Titel string' como RowHeader e outros membros como conteúdo "Row"? Sem qualquer modificação, ele vai me mostrar "Titel" como ColumnHeader e o valor de Titel como linha, dito de "Value1" como ColumnHeader e o valor (es) de Value1 como linhas etc.

Obrigado por qualquer ajuda!

Felicidades

EDIT: Para melhor compreensão, isso é o que eu tenho

[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] 

e é isso que eu estou procurando:

[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: Eu também achei uma abordagem agradável aqui: http://codemaverick.blogspot.com/2008/02 /transpose-datagrid-or-gridview-by.html

Foi útil?

Solução

Você pode usar RowHeaderTemplate assim:

<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>

Você também terá que definir AutoGenerateColumns para false e criar suas próprias colunas para evitar a propriedade Titel também está sendo exibido como uma coluna.

Editar

Agora eu entendo que você deseja transpor a DataGrid. Acho que a solução fácil, mas um pouco "hacky" é criar uma lista de objetos "transpostas". Para fazer isso você teria que saber antecipadamente quantos objetos existem na lista original e, em seguida, criar uma nova classe com tantas propriedades como existem objetos.

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
  },
  ...
};

A menos solução "hacky" é modificar o modelo do DataGrid controle para linhas e colunas de swap. No entanto, DataGrid é um controle complexo e pode ser um pouco esmagadora para modificar o modelo de controle.

Outras dicas

Esta discussão é um pouco antiga, mas talvez alguém ainda está interessado ... Eu também estava procurando maneira de transpor uma WPF DataGrid e, finalmente, eu encontrei o seguinte projeto de código aberto no CodePlex:

Transposed WPF DataGrid

Espero que isso ajude.

Converter a lista de objetos de negócios em uma tabela de dados onde você criou as colunas de propriedades do seu objeto e defina-o como o seu datagrid é ItemSource. Se você deseja ativar a edição, então você vai ter que iterar a tabela de dados e manualmente aplicar os valores de volta para seus objetos de negócios. reflexão pode ajudar a tornar a grade genérico. Apenas alguns pensamentos.

Eu acho abordagem mais limpa é usar ItemsControl vez de DataGrid para seu cenário.

Siga as instruções na este post e criar seu próprio ItemTemplate para o máximo controle. Dessa forma, você pode criar um modelo para cada coluna (que pode ser um si Datagrid).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top