WPF horizontal DataGrid


Answers

Je suis vraiment debout sur les épaules des géants ici :-) mais, j'ai une amélioration supplémentaire.

@dimaKudr a suggéré un moyen de transformer les colonnes prédéfinies sans code derrière, et @FrankE a raffiné l'ordre des colonnes. Ce que AutoGenerateColumns="True" est un moyen de transformer des colonnes générées automatiquement ( AutoGenerateColumns="True" ), en utilisant le modèle DataGrid.CellStyle . Donc la solution complète (et plutôt élégante) est:

<DataGrid ItemsSource="{Binding YourObservableCollection}"
        AutoGenerateColumns="True"
        AutoGeneratingColumn="OnAutoGeneratingColumn">
    <DataGrid.LayoutTransform>
        <TransformGroup>
            <RotateTransform Angle="90"/>
            <MatrixTransform Matrix="-1,0,0,1,0,0"/>
        </TransformGroup>
    </DataGrid.LayoutTransform>
    <DataGrid.ColumnHeaderStyle>
        <Style TargetType="{x:Type DataGridColumnHeader}"
                BasedOn="{StaticResource {x:Type DataGridColumnHeader}}">
            <Setter Property="LayoutTransform">
                <Setter.Value>
                    <TransformGroup>
                        <RotateTransform Angle="-90"/>
                        <ScaleTransform ScaleX="1" ScaleY="-1" />
                    </TransformGroup>
                </Setter.Value>
            </Setter>
        </Style>
    </DataGrid.ColumnHeaderStyle>
    <DataGrid.CellStyle>
        <Style  TargetType="DataGridCell">
            <Setter Property="LayoutTransform">
                <Setter.Value>
                    <TransformGroup>
                        <RotateTransform Angle="-90"/>
                        <ScaleTransform ScaleX="1" ScaleY="-1" />
                    </TransformGroup>
                </Setter.Value>
            </Setter>
        </Style>
    </DataGrid.CellStyle>
</DataGrid>
Question

Je voudrais avoir un DataGrid WPF avec une orientation horizontale, quelqu'un connaît-il une solution?




J'ai trouvé cette approche très utile, j'ai cependant fait une rotation et une mise en miroir:

TransformGroup transformGroup = new TransformGroup();
transformGroup.Children.Add(new RotateTransform(90));
transformGroup.Children.Add(new MatrixTransform(-1, 0, 0, 1, 0, 0));

ou en Xaml:

<!-- we rotate the whole DataGrid by -90 degree and then mirror via y-Axis so that it is docked vertically to the left side-->
<DataGrid.LayoutTransform>
    <TransformGroup>
        <RotateTransform Angle="90"/>
        <MatrixTransform Matrix="-1,0,0,1,0,0"/>
    </TransformGroup>
</DataGrid.LayoutTransform>

En utilisant la mise en miroir, j'ai le champ à la fin de la liste des colonnes en bas au lieu d'en haut.