locked
Scrollbar von DataGrid wird nicht angezeigt! RRS feed

  • Frage

  • Hallo,

    ich habe das Problem, dass sobald das DataGrid innerhalb eines StackPanel steht, dann wird scrollbar von dem DataGrid nicht mehr angezeigt!

    Weiss jemand vielleicht woran es liegt?

            <StackPanel x:Name="seite">
                <sdk:Label Margin="0,10,0,10"  HorizontalAlignment="Center" Height="27" x:Name="lbl_titel" Width="208" FontSize="18" FontWeight="Bold" Content="Titel" />
                <sdk:Label Margin="10,0,0,0" Height="21" x:Name="lbl_name" Width="484" HorizontalAlignment="Left" Content="Mustermann, Erika"/>
                <sdk:DataGrid HeadersVisibility="Column"  AlternatingRowBackground="White" RowBackground ="White" Foreground="Black" HorizontalAlignment="Left" x:Name="dataGrid" VerticalAlignment="Top" Width="Auto" Height="Auto"
                   Margin="10,10,10,0" GridLinesVisibility="All"
                          IsReadOnly="True" CanUserSortColumns = "False" HorizontalScrollBarVisibility="Auto"
                          VerticalScrollBarVisibility="Auto" BorderBrush="Black" BorderThickness="1" LoadingRow="dataGrid_LoadingRow" HorizontalGridLinesBrush="Black"
                          VerticalGridLinesBrush="Black" />
            </StackPanel>


    Gruesse, NUNUI

    Sonntag, 21. September 2014 17:18

Antworten

  • Hallo,
    das Problem besteht darin, dass das StackPanel seinem Inhalt immer ausreichend Platz zur Verfügung stellt. Wenn du also das gesamte StackPanel betrachtest, siehst du auch das DataGrid, nur das das StackPanel eben nicht komplett zu sehen ist.

    Wenn die Labels über dem DataGrid immer sichtbar sein sollen, empfehle ich dir das Layout in ein Grid zu verschachteln:

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <StackPanel x:Name="seite">
            <sdk:Label Margin="0,10,0,10"  HorizontalAlignment="Center" Height="27" x:Name="lbl_titel" Width="208" FontSize="18" FontWeight="Bold" Content="Titel" />
            <sdk:Label Margin="10,0,0,0" Height="21" x:Name="lbl_name" Width="484" HorizontalAlignment="Left" Content="Mustermann, Erika"/>
        </StackPanel>
        <sdk:DataGrid Grid.Row="1" HeadersVisibility="Column"  AlternatingRowBackground="White" RowBackground ="White" Foreground="Black" HorizontalAlignment="Left" x:Name="dataGrid" VerticalAlignment="Top" Width="Auto" Height="Auto"
                              Margin="10,10,10,0" GridLinesVisibility="All"
                              IsReadOnly="True" CanUserSortColumns = "False" HorizontalScrollBarVisibility="Auto"
                              VerticalScrollBarVisibility="Auto" BorderBrush="Black" BorderThickness="1" LoadingRow="dataGrid_LoadingRow" HorizontalGridLinesBrush="Black"
                              VerticalGridLinesBrush="Black" />
    </Grid>

    So bekommen die Label ihren benötigten Platz und da Grid verteilt den Rest auf das DataGrid, welches dadurch ggf. wieder Scrollleisten anzeigt.

    Wenn du dagegen die Labels mit weg scrollen willst, packe das StackPanel einfach in einen ScrollViewer und passe ggf. die Sichtbarkeit der Scrollleisten an.


    Tom Lambert - C# MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets


    Sonntag, 21. September 2014 17:54

Alle Antworten

  • Hallo,
    das Problem besteht darin, dass das StackPanel seinem Inhalt immer ausreichend Platz zur Verfügung stellt. Wenn du also das gesamte StackPanel betrachtest, siehst du auch das DataGrid, nur das das StackPanel eben nicht komplett zu sehen ist.

    Wenn die Labels über dem DataGrid immer sichtbar sein sollen, empfehle ich dir das Layout in ein Grid zu verschachteln:

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <StackPanel x:Name="seite">
            <sdk:Label Margin="0,10,0,10"  HorizontalAlignment="Center" Height="27" x:Name="lbl_titel" Width="208" FontSize="18" FontWeight="Bold" Content="Titel" />
            <sdk:Label Margin="10,0,0,0" Height="21" x:Name="lbl_name" Width="484" HorizontalAlignment="Left" Content="Mustermann, Erika"/>
        </StackPanel>
        <sdk:DataGrid Grid.Row="1" HeadersVisibility="Column"  AlternatingRowBackground="White" RowBackground ="White" Foreground="Black" HorizontalAlignment="Left" x:Name="dataGrid" VerticalAlignment="Top" Width="Auto" Height="Auto"
                              Margin="10,10,10,0" GridLinesVisibility="All"
                              IsReadOnly="True" CanUserSortColumns = "False" HorizontalScrollBarVisibility="Auto"
                              VerticalScrollBarVisibility="Auto" BorderBrush="Black" BorderThickness="1" LoadingRow="dataGrid_LoadingRow" HorizontalGridLinesBrush="Black"
                              VerticalGridLinesBrush="Black" />
    </Grid>

    So bekommen die Label ihren benötigten Platz und da Grid verteilt den Rest auf das DataGrid, welches dadurch ggf. wieder Scrollleisten anzeigt.

    Wenn du dagegen die Labels mit weg scrollen willst, packe das StackPanel einfach in einen ScrollViewer und passe ggf. die Sichtbarkeit der Scrollleisten an.


    Tom Lambert - C# MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets


    Sonntag, 21. September 2014 17:54
  • Danke für die Antwort.

    Dein ersten Vorschlag ist genau das was ich gesucht habe. Das Problem dabei ist, dass ich gerne die zwei Labels und den DataGrid in einem Bereich haben möchte, so dass ich sie dem Druckbefehl übergeben kann, damit die Buttons darunter nicht mit gedruckt werden! Und deswegen wollte ich auch die zwei Labels und den dataGrid innerhalb eines StackPanels haben! 


    Gruesse, NUNUI

    Sonntag, 21. September 2014 19:52
  • Du hast vermutlich vor das StackPanel zu rendern und zu drucken, oder? Du kannst auch das Grid übergeben. Dadurch wird das StackPanel inkl. Labels und das DataGrid gerendert.
    Dabei musst du nur aufpassen, dass der sichtbare Ausschnitt des DataGrid auch korrekt eingestellt ist.

    Tom Lambert - C# MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Sonntag, 21. September 2014 19:54
  • genau das will ich, dass das StackPanel gerendert und gedruckt wird. Aber wenn ich das Grid übergebe, dann werden die Buttons auch gerendert und gedruckt und das ist genau das was ich nicht will!

    Gruesse, NUNUI

    Sonntag, 21. September 2014 20:07
  • Dann übergibst du das falsche Grid. Du hast ein Grid in dem die Buttons und mein vorgschlagenes Grid drinn liegen. Du musst mein Grid übergeben, nicht das das auch die Buttons enthält.

    Wenn es trotzdem noch nicht klappt, zeige mal bitte den XAML Code mit Buttons und wie du das Control renderst.


    Tom Lambert - C# MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Sonntag, 21. September 2014 20:14
  • Ups, mein Fehler!

    Da hast Du vollkommen recht und es funktioniert auch genau wie ich es vorhatte! Das Problem war dass ich Deine Code kopiert und eingefügt habe und Du hattest den Slash bei schliessende Tag </Grid.RowDefinitios> vergessen gehabt und deswegen auch den Fehler bei mir! Aber jetzt funktioniert alles wunderbar, VIELEN DANK !!!


    Gruesse, NUNUI

    Sonntag, 21. September 2014 20:36