1 Datagrid läd nicht

  • WPF

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    1 Datagrid läd nicht

    Hi leute,

    ich habe ein Tabcontrol mit 3 Tabs. In jedem Tab 1 und 2 ist ein Datagrid der aus SQL kommt, angezeigt wird per dataview.

    Grid1 in Tab1

    XML-Quellcode

    1. <DataGrid x:Name="DG1" Grid.Column="0" Grid.RowSpan="3" CanUserReorderColumns="False" CanUserResizeColumns="true" CanUserSortColumns="true" SelectionMode="Single" CanUserAddRows="false" Margin="0,50,0,0" FontSize="12" CanUserDeleteRows="false" CanUserResizeRows="True" AutoGenerateColumns="false" ItemsSource="{Binding dtView_Wiki, Mode=Twoway}">
    2. <DataGrid.Columns>
    3. <DataGridTextColumn Header="Nr" Binding="{Binding Nr}" Width="30" IsReadOnly="true"/>
    4. <DataGridTextColumn Header="Tag" Binding="{Binding Tag}" Width="180" IsReadOnly="true"/>
    5. <DataGridTextColumn Header="Bereich" Binding="{Binding Bereich}" Width="150" IsReadOnly="true"/>
    6. <DataGridTextColumn Header="Datum" Binding="{Binding Datum}" IsReadOnly="true"/>
    7. <DataGridCheckBoxColumn Header="Favorit" Binding="{Binding Favorit, UpdateSourceTrigger=Default}"/>
    8. </DataGrid.Columns>
    9. </DataGrid>


    Grid2 in Tab2

    XML-Quellcode

    1. <DataGrid x:Name="DG_UserTickets" Grid.Column="0" Grid.RowSpan="3" CanUserReorderColumns="False" CanUserResizeColumns="true" CanUserSortColumns="true" SelectionMode="Single" CanUserAddRows="false" Margin="0" FontSize="12" CanUserDeleteRows="false" CanUserResizeRows="True" AutoGenerateColumns="False" ItemsSource="{Binding dtView_2, Mode=Twoway}" >
    2. <DataGrid.Columns>
    3. <DataGridTextColumn Header="Nr" Binding="{Binding Nr}" Width="30" IsReadOnly="true"/>
    4. <DataGridTextColumn Header="Tag" Binding="{Binding Tag}" Width="180" IsReadOnly="true"/>
    5. <DataGridTextColumn Header="Bereich" Binding="{Binding Dept}" Width="100" IsReadOnly="true"/>
    6. <DataGridCheckBoxColumn Header="Erledigt" Binding="{Binding Erledigt, UpdateSourceTrigger=Default}"/>
    7. <DataGridTextColumn Header="Experte" Binding="{Binding Experte}" Width="100" IsReadOnly="true"/>
    8. <DataGridTextColumn Header="Datum" Binding="{Binding Datum}" IsReadOnly="true"/>
    9. <DataGridCheckBoxColumn Header="Experten Antwort" Binding="{Binding ExpertenAntwort, UpdateSourceTrigger=default}" IsReadOnly="true"/>
    10. <DataGridTextColumn Header="" Binding="{Binding Shortname}" FontSize="1" FontWeight="Thin" IsReadOnly="true"/>
    11. </DataGrid.Columns>
    12. </DataGrid>


    wenn ich die Tabs wechsel, läd es die Daten aus SQL per

    Tab1 Datagrid1

    VB.NET-Quellcode

    1. Dim cmd As New SqlCommand
    2. Dim sql As New SqlDataAdapter(cmd)
    3. DT_Gelöst.Columns.Clear()
    4. DT_Gelöst.Rows.Clear()
    5. cmd.Connection = Me.connection
    6. If Me.connection.State = ConnectionState.Open Then
    7. Else
    8. Me.connection.Open()
    9. End If
    10. cmd.CommandText = "Select [Nr], [Tag], [Bereich], [Datum], [Favorit] FROM dbo.Database1 Where [Check]='0' ORDER BY [Nr] ASC"
    11. sql.Fill(DT_Gelöst)
    12. dtView_Wiki = DT_Gelöst.DefaultView
    13. Me.DataContext = Me


    tab2 datagrid2

    VB.NET-Quellcode

    1. Dim Str_Username As String = Environment.UserName.ToString
    2. Dim cmd As New SqlCommand
    3. Dim sql As New SqlDataAdapter(cmd)
    4. DT_User.Columns.Clear()
    5. DT_User.Rows.Clear()
    6. cmd.Connection = Me.connection
    7. If Me.connection.State = ConnectionState.Open Then
    8. Else
    9. Me.connection.Open()
    10. End If
    11. cmd.CommandText = "Select [Nr], [Tag], [Dept], [Erledigt],[Experte],[Datum],[ExpertenAntwort],[Shortname] FROM dbo.Database2 where [User] = '" & Str_Username & "' ORDER BY [Nr] ASC"
    12. sql.Fill(DT_User)
    13. PublicClass.NewMailUser()
    14. dtView_2 = DT_User.DefaultView
    15. Me.DataContext = Me


    jetzt komm etwas komisches:

    Program startet in Tab 0
    WENN ich auf den Tab 1 gehe, läd es die Daten. Gehe ich danach auf Tab2 läd es die Daten.

    WENN ich zuerst nach programmstart auf Tab2 gehe, läd es die Daten. Gehe ich danach auf Tab1 läd es die daten NICHT.


    Wo ist der Fehler? Hat es was mit Me.Datacontext = Me zu tun?
    Poste doch bitte mal die Klasse an welche die View gebunden ist. Also wo die Properties dtView_2 und dtView_Wiki enthalten sind.

    Aber wozu setzt du überhaupt den DataContext mehrmals. den musst du ja nur 1x setzen. Dann ist die Bindung hergestellt und fertig.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hi, hab keine Properties. Es Zeigt lediglich die Daten an die im SQL sind.

    lediglich

    Quellcode

    1. Public Property dtView_2 As DataView


    Bei meinen anderen programmen funktioniert es einwandfrei...

    ja ich habe das Datacontext immer nach jedem mal neu aufgerufen. ich löschte nun mal alle bis auf 1. leider selbes verhalten :(

    Nofear23m schrieb:

    Poste doch bitte mal die Klasse an welche die View gebunden ist.

    Bitte die Klasse Posten. Mit einer Zeile fange ich leider nicht viel an.
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo,

    als ich damals noch auf die weiße ein DataGrid befüllt habe, musste man (glaube ich) immer am Ende
    dt_view2.Items.Refresh()
    machen.
    Weiß allerdings nicht ob das etwas bei dir bringt.
    Du kannst es ja Mal ausprobieren.

    Viele Grüße
    Florian
    ----

    WebApps mit C#: Blazor
    Hallo,

    r0tzi schrieb:

    @flori2212 das gibts nicht mehr :-/ ..

    Ich merke gerade du musst schon den Namen deines DataGrids nehmen (DG1).
    Dann gibt es die Funktion schon noch.

    Viele Grüße
    Florian
    ----

    WebApps mit C#: Blazor
    @r0tzi
    Du bindest an eine Klasse mit Me.DataContext = Me
    Diese Klasse möchte ich als ganztes sehen. Am besten sogar den XAML UND die Klasse. Und zwar als ganzes.
    Ich habe eine vermutung. Und das du keine Prperties hast kann schonmal nicht stimmen. Wie soll denn dann ItemsSource="{Binding dtView_2, Mode=Twoway}" funktionieren?

    Aber wenn du nicht willst ist das auch OK für mich.
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Naja, mir geht es darum das wenn dein Property wie oben von dir gepostet aussieht dann haben wir den Fehler:
    Public Property dtView_2 As DataView


    Denn ohne das du die WPF über änderungen mitels INotifyPropertyChanged benachrichtigst wird diese nicht aktualisieren.

    Du solltest mal das dementsprechende Kapitel in meiner Tutorialreihe durchgehen, da fehlt dir ein wenig was.
    Anschließend wirds auch funktionieren.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    r0tzi schrieb:

    warum funktioniert es dann genau so in anderen programmen?

    Das kann ich dir eben nicht sagen wenn ich nicht den ganzen code sehe, es gibt mehrere möglichkeiten die aktualisierung zu erzwingen. die richtige herangehensweise ist deine jedenfalls nicht. Insofern müsste ich raten, was ich nicht gerne mache. Wenn du nicht im stande bist mir etwas zu zeigen. (Es muss im übrigen nicht der originale Code sein, innerhalb von minuten kann man ein Minibeispiel um den Fehler zu reproduzieren erstellen, aber dazu muss man wollen)

    Ich kann dir nur Helfen wenn ich alle benötigten Infos habe, ansonsten wirds schwierig. Vorallem wenn nicht so gearbeitet wird wie man untrer WPF eigendlich sollte, da kann ich nur ins blaue raten.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    wie soll ich dir ein example machen wenn du nicht die sql tabelle hast? Denn wie bereits gesagt, in den anderen programmen funktioniert es einwandfrei.
    DAs dataview wird ja gefüllt nur der datagrid zeigt die daten nicht an obwohl das binding dran ist. es wird sonst kein anderer code ausgeführt als oben geschrieben.

    r0tzi schrieb:

    wie soll ich dir ein example machen wenn du nicht die sql tabelle hast?

    Brauch ich nicht. Ich brauche nur den relevanten Code und den kannst du ja Repoduzieren oder eben nicht.

    r0tzi schrieb:

    Denn wie bereits gesagt, in den anderen programmen funktioniert es einwandfrei.

    Aber in diesem nicht richtig, also muss ja was falsch sein und DU weist nicht was, willst mir aber nicht die Infos geben die ich brauche. Also kann ich dir beim besten willen nicht helfen.

    Sorry, nicht mit diesen Angaben. Insofern kickst du mich hier raus. Vieleicht weis jemand anderes Rat, ich kann mit diesen Infos nihct genug anfangen. Leider.

    Grüße und viel Glück
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##