Domanda

Ho un

List<DetailObject> someList;

che si presenta in questo modo:

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

Qualcuno sa come posso usare (con DataGrid.AutoGenerateColumns = "true") il valore di 'stringa Titel' come RowHeader e gli altri membri come Content "Riga"? Senza alcuna modifica, che verrà visualizzato me "Titel" come ColumnHeader e il valore di Titel come fila, dito per "Value1", come ColumnHeader e il valore (s) di Valore1 come righe, ecc.

Grazie per qualsiasi aiuto!

Saluti

EDIT: Per una migliore comprensione, questo è quello che ho

[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 questo è quello che sto cercando:

[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: Ho trovato anche un approccio bello qui: http://codemaverick.blogspot.com/2008/02 /transpose-datagrid-or-gridview-by.html

È stato utile?

Soluzione

È possibile utilizzare RowHeaderTemplate in questo modo:

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

Sarà inoltre necessario impostare AutoGenerateColumns per false e creare le proprie colonne per evitare la proprietà Titel anche essere visualizzato come una colonna.

Modifica

Ora capisco che si desidera trasporre la DataGrid. Penso che la soluzione facile, ma un po ' "hacky" è quello di creare una lista di oggetti "trasposte". Per fare questo si dovrebbe sapere in anticipo quanti oggetti ci sono nella lista originale e quindi creare una nuova classe con il maggior numero di proprietà in quanto non vi sono oggetti.

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

Una soluzione meno "hacky" è quello di modificare il modello di controllo del DataGrid per scambiare righe e colonne. Tuttavia, DataGrid è un controllo complessa e può essere un po 'opprimente per modificare il modello di controllo.

Altri suggerimenti

Questo thread è un po 'vecchio, ma forse qualcuno è ancora interessato ... Sono stato anche alla ricerca di modo per trasporre una WPF DataGrid e alla fine ho trovato il seguente progetto open source su CodePlex:

recepita WPF DataGrid

Spero che questo aiuti.

Convertire l'elenco degli oggetti di business per un DataTable cui è stato creato le colonne dalle proprietà del vostro oggetto e impostarlo come ItemSource del datagrid. Se si desidera attivare la modifica, quindi dovrete scorrere DataTable e applicare manualmente i valori a oggetti di business. riflessione può contribuire a rendere la griglia generico. Solo alcuni pensieri.

Credo approccio più pulito è quello di utilizzare ItemsControl invece di DataGrid per lo scenario.

Seguire le indicazioni sulla questo post del blog e di creare il proprio ItemTemplate per il massimo controllo. In questo modo, è possibile creare un modello per ogni colonna (che può essere un DataGrid stesso).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top