Laden...

Wie eine Matrix definieren?

Erstellt von Byteteufel vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.693 Views
B
Byteteufel Themenstarter:in
35 Beiträge seit 2010
vor 14 Jahren
Wie eine Matrix definieren?

Hallo Leute,

so langsam bekomme ich das Layout der Fenster hin. Nun aber soll ich eine Matrix aufbauen, wobei die Anzahl der Zeilen und Spalten abhängig der Anzahl der Personen und der Zugangsberechtigungen flexibel sind.

Ich dachte da an ein Datagrid, dort ist der Header aber nicht senkrecht, sondern waagerecht. Somit wird die Tabelle zu groß. Die Inhalte sind nur Zahlen von 0 - 9.

Dann soll der Cursor dort stehen wo die aktuelle Zelle ist. Zeile und Spalte sind farblich markiert.

Als Beispiel ein Bild in der Anlage.

Ich bin ratlos, wie ich an solch eine Matrix ran gehen kann.

Wäre prima, wenn mir hier jemand Tipps geben kann.

Danke.

Gruß

Axel

M
1 Beiträge seit 2008
vor 14 Jahren

Mit GDI zeichnen ? Ereignisse über Mouseposition (z.B. Panel) realisieren.
Habe auch schon mal mit Arrays von Controls experimentiert, ist aber nicht sehr performant 😮)

Früher war alles besser.. auch die Zukunft!

C
2.122 Beiträge seit 2010
vor 14 Jahren

Ich dachte da an ein Datagrid, dort ist der Header aber nicht senkrecht, sondern waagerecht.

Das Problem hast du in jedem mir bekannten Control, ich würd die Header selber zeichnen.
Ein Datagrid bietet sich dann trotzdem an, vielleicht im "Virtual mode", also wenn du die anzuzeigenden Inhalte der Zellen zur Laufzeit bestimmst. Mit einer passenden Datenstruktur im Hintergrund könnte das dann durchaus elegant machbar sein.
Auch die Färbung der Zeile und Spalte kannst du durch selber zeichnen erreichen.
Das ist dann zwar nicht alles zusammenklickbar, aber dafür kannst du es dann wirklich so gestalten wie du es haben möchtest.

328 Beiträge seit 2006
vor 14 Jahren

Ich dachte da an ein Datagrid, dort ist der Header aber nicht senkrecht, sondern waagerecht. Somit wird die Tabelle zu groß.

Du kannst den Header allerdings senkrecht machen in WPF:

        <DataGrid AutoGenerateColumns="False">
            <DataGrid.ColumnHeaderStyle>
                <Style TargetType="{x:Type DataGridColumnHeader}">
                    <Setter Property="LayoutTransform">
                        <Setter.Value>
                            <RotateTransform Angle="90" />
                        </Setter.Value>
                    </Setter>
                </Style>
            </DataGrid.ColumnHeaderStyle>
            <DataGrid.Columns>
                <DataGridTextColumn Header="Header" />
                <DataGridTextColumn Header="Header" />
                <DataGridTextColumn Header="Header" />
            </DataGrid.Columns>
        </DataGrid>

Träume nicht dein Leben sondern lebe deinen Traum.
Viele Grüße, David Teck

B
Byteteufel Themenstarter:in
35 Beiträge seit 2010
vor 14 Jahren

Hallo David,

danke für Dein Beispiel, leider bekomme ich es nicht zum "Fliegen":

Meldung: "Der DataGridColumnHeader-Typ wurde nicht gefunden"

Zeile: <Style TargetType="{x:Type DataGridColumnHeader}">


<Page x:Class="meinProg.PAGES.pageMatrix"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="pageMatrix" xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit">
    <Grid>
        <DockPanel>
            <Grid Name="grdPlanMain" >
                <Grid.RowDefinitions>
                    <RowDefinition Height="26*" />
                    <RowDefinition Height="74*" />
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="40*" />
                    <ColumnDefinition Width="160*" />
                </Grid.ColumnDefinitions>
                <my:DataGrid AutoGenerateColumns="False" Grid.Column="1" Grid.Row="1" Name="dataGrid1">
                    <my:DataGrid.ColumnHeaderStyle>
                        <Style TargetType="{x:Type DataGridColumnHeader}">
                            <Setter Property="LayoutTransform">
                                <Setter.Value>
                                    <RotateTransform Angle="90" />
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </my:DataGrid.ColumnHeaderStyle>
                </my:DataGrid> 
                
            </Grid>
        </DockPanel>
        
    </Grid>
</Page>

328 Beiträge seit 2006
vor 14 Jahren

das liegt daran dass ich das ganze unter .NET4 ausprobiert habe und dort ist das DataGrid direkt mit integriert, deswegen klappt das auch so wie ich es gemacht habe.
Bei dir kennt er aber den Typ "DataGridColumnHeader" nicht, wie es dir die Fehlermeldung ja auch schon mitteilt.

Versuche mal folgendes: <Style TargetType="{x:Type my:DataGridColumnHeader}">

Träume nicht dein Leben sondern lebe deinen Traum.
Viele Grüße, David Teck