Pregunta

Tengo un

List<DetailObject> someList;

que tiene este aspecto:

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

¿Alguien sabe cómo puedo usar (con DataGrid.AutoGenerateColumns = "true") el valor de la 'cadena de Titel' como RowHeader y otros miembros como contenido "Fila"? Sin ningún tipo de modificaciones, que va a muéstreme "Título", como ColumnHeader y el valor de Titel como fila, para dito "Valor1" como ColumnHeader y el valor (s) de Valor1 como filas etc.

Gracias por cualquier ayuda!

Saludos

EDIT: Para una mejor comprensión, esto es lo que tengo

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

y esto es lo que estoy buscando:

[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: He encontrado también un acercamiento agradable aquí: http://codemaverick.blogspot.com/2008/02 /transpose-datagrid-or-gridview-by.html

¿Fue útil?

Solución

Puede utilizar RowHeaderTemplate como esto:

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

También tendrá que establecer AutoGenerateColumns a false y crear sus propias columnas para evitar la propiedad Titel también se muestra como una columna.

Editar

Ahora entiendo que desea transponer la DataGrid. Creo que la solución fácil, pero un poco "hacky" es crear una lista de objetos "transposición". Para ello tendría que saber de antemano cuántos objetos hay en la lista original y luego crear una nueva clase con todas las propiedades que hay 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
  },
  ...
};

Una solución menos "hacky" es modificar la plantilla de control de la DataGrid para intercambiar filas y columnas. Sin embargo, DataGrid es un control complejo y puede ser un poco abrumador para modificar la plantilla de control.

Otros consejos

Este hilo es un poco viejo, pero tal vez alguien todavía está interesada ... Yo también estaba buscando una manera de incorporar WPF DataGrid y finalmente encontró el siguiente proyecto de código abierto en CodePlex:

transpuesto WPF DataGrid

Espero que esto ayude.

Convertir la lista de objetos de negocio a una tabla de datos en la que han creado las columnas de las propiedades de su objeto y establecer que a medida que ItemSource de su cuadrícula de datos. Si desea habilitar la edición, a continuación, tendrá que recorrer la tabla de datos y de forma manual aplicar los valores de nuevo a sus objetos de negocio. reflexión puede ayudar a que la red genérica. sólo algunos pensamientos.

Creo enfoque más limpia es utilizar ItemsControl en lugar de DataGrid para su escenario.

Siga las instrucciones de esta entrada de blog y crear su propio ItemTemplate para un control máximo. De esta manera, se puede crear una plantilla para cada columna (que puede ser una cuadrícula de datos en sí).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top