TextBlock binden an Tabelle mit variablen Index

  • WPF

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Lubeca.

    TextBlock binden an Tabelle mit variablen Index

    Hallo zusammen,
    Ich habe ein DataGrid, das an ein DataSet (über CollectionView) gebunden ist. Das DataGrid zeigt mir verschiedene Spalten aus 2 Tabellen an. Die Tabellen sind über eine DataRelation mit einander verbunden. Die Daten der zweiten Tabelle sind im DataGrid als ComboBox realisiert.

    In einem Textblock will ich mir jetzt den Inhalt der Spalte2 aus Tabelle 2 anzeigen lassen.
    Leider funktioniert das setzen des CurrentItem nicht, obwohl IsSynchronizedWithCurrentItem ="True" in dem DataGrid eingestellt ist.
    Ich hatte es so versucht:

    XML-Quellcode

    1. <TextBlock Text={Binding /SP2,Source={StaticResource DTab2ViewSource}}/>


    Im VB-Code frage ich SelectedValue von der Spalte "Tab2/Sp2" aus dem DataGrid ab, somit bekomme ich den Index aus Tabelle 2 und kann mir den Text aus Spalte2(Index) anzeigen lassen.

    VB.NET-Quellcode

    1. Dim Index As Integer = DG.SelectedValue(5)
    2. Dim Text As String = DS.DTab2(Index).SP2
    3. Textblock.Text = Text


    Wie kann ich dieses als Bindung in XAML realisieren?
    Jedes Mal wenn sich der Index ändert soll sich auch der Text ändern.

    Tschüßi Lubeca
    Leider ist es mir nicht möglich das Projekt hier einzustellen. Der Computer kann nicht ans Netzwerk und damit auch nicht ins Internet. Kopieren klapp auch nicht. Das Projekt ist schon sehr groß geworden und beinhaltet 6 Fenster, die aber für dieses Problem irrelevant sind.

    War denn mein Code-Ansatz richtig? Oder ist da schon etwas falsch?

    Lubeca schrieb:

    XML-Quellcode

    <TextBlock Text={Binding /SP2,Source={StaticResource DTab2ViewSource}}/>


    Wie müsste es aussehen, wenn man den Begriff CurrentItem verwenden würde?

    Tschüßi Lubeca
    ich kann nix zu sagen, weil ich nicht genau weiß worums geht. Und grad bei diesen Bindereien kommts auf 100%ige Genauigkeit an, und alle Komponenten müssen genau aufeinander abgestimmt sein.

    Kannst du ein Sample machen, was den Fehler reproduziert? Ich hab dir doch ein Sample verlinkt - kannst du das nicht so umbauen, dasses deinen Fehler demonstriert?
    Hallo,
    Ich habe jetzt das Problem einzeln nachgestellt.
    Nur ist es mir nicht möglich die Dateien zu Zippen und auf diesen Computer zubringen. Welchen Code brauchst du noch, den kann ich dann ja abtippen?
    Feststellen musste ich, dass IsSynchronizedWithCurrentItem ="True" nur auf die Tabelle1 zugreift und nicht die Daten aus Tabelle2 synchronisiert. Ist ja auch logisch, das DataGrid ist ja nur mit der Tabelle1 verbunden. Nur zwei Spalten nicht.
    Hier der Quellcode:

    XML-Quellcode

    1. <Window
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:local="clr-namespace:Dataset_Testen" x:Class="MainWindow"
    5. Title="MainWindow" Height="350" Width="525">
    6. <Window.Resources>
    7. <local:DSTest x:Key="DSTest"/>
    8. <CollectionViewSource x:Key="DTab1ViewSource" Source="{Binding DTab1}"/>
    9. <CollectionViewSource x:Key="DTab2ViewSource" Source="{Binding DTab2}"/>
    10. </Window.Resources>
    11. <Grid Margin="5">
    12. <Grid.RowDefinitions>
    13. <RowDefinition Height="30*"/>
    14. <RowDefinition Height="250*"/>
    15. <RowDefinition Height="30"/>
    16. </Grid.RowDefinitions>
    17. <DataGrid x:Name="DTHaupt1" Grid.Row="1" IsReadOnly="True" SelectionMode="Single" AutoGenerateColumns="False" ItemsSource="{Binding Source={StaticResource DTab1ViewSource}}" IsSynchronizedWithCurrentItem="True" >
    18. <DataGrid.Columns>
    19. <DataGridTextColumn x:Name="S1Column" Binding="{Binding S1}" Header="Spalte 1" Width="SizeToHeader"/>
    20. <DataGridTextColumn x:Name="S2Column" Binding="{Binding S2}" Header="Spalte 2" Width="SizeToHeader"/>
    21. <DataGridTextColumn x:Name="S3Column" Binding="{Binding S3}" Header="Spalte 3" Width="SizeToHeader"/>
    22. <DataGridTextColumn x:Name="S4Column" Binding="{Binding S4}" Header="Spalte 4" Width="SizeToHeader"/>
    23. <DataGridComboBoxColumn ItemsSource="{Binding Source={StaticResource DTab2ViewSource}}" DisplayMemberPath="SP2" SelectedValuePath="IDNeben" SelectedValueBinding="{Binding IDTab2}" Header="Tab2Spalte2" />
    24. <DataGridComboBoxColumn ItemsSource="{Binding Source={StaticResource DTab2ViewSource}}" DisplayMemberPath="SP3" SelectedValuePath="IDNeben" SelectedValueBinding="{Binding IDTab2}" Header="Tab2Spalte3" Visibility="Collapsed" />
    25. </DataGrid.Columns>
    26. </DataGrid>
    27. <StatusBar Margin="0,5,0,0" Grid.Row="2">
    28. <StatusBarItem Content="Augewählter Eintrag:" />
    29. <TextBlock x:Name="TxtBlkStatus1" Grid.Row="2" Width="384" Text="{Binding /SP2,Source={StaticResource DTab2ViewSource}}"/>
    30. </StatusBar>
    31. <Button x:Name="btnDaten" Content="Daten erstellen" HorizontalAlignment="Left" Margin="53,4,0,0" VerticalAlignment="Top" Width="104"/>
    32. </Grid>
    33. </Window>



    Wie kann ich jetzt das Binding des TextBlock ändern?
    Ziel ist es, den Text aus Tab2(Sp2) passend zu der gerade ausgewählten Zeile im TextBlock anzeigen zulassen. Also das was im DataGrid in der ersten ComboBox zusehen ist.

    Tschüßi Lubeca
    Bilder
    • Dataset_Testen1.PNG

      7,98 kB, 429×201, 169 mal angesehen

    Lubeca schrieb:

    Nur ist es mir nicht möglich die Dateien zu Zippen und auf diesen Computer zubringen.
    Wieso nicht?

    code zum Abtippen nutzt mir nix, ich muss ja herumprobieren.
    Also hab ich sowas jetzt im DatasetTester eingebaut, im Joiningview-Window des NorthwindTester-Projektes die unterste Combobox zeigt immer die Kategorie des angewählten Artikels an.

    Mit einem Textblock geht das nicht so ohneweiteres, aber jetzt hab ichs doch geschafft, aber voll das kranke Binding.
    Füge dieses noch unter die letzte Combobox:

    XML-Quellcode

    1. <TextBlock hlp:GridEx.Range="a6" Text="{Binding Path=TheDataset.Artikel/Row.KategorienRow.Kategoriename}" />
    Gebunden ist an den aktuellen Artikel, und das ist vom Typ DataRowView. Und DataRowview hat eine Row-Property, und das ist eine ArtikelRow (in meinem Datenmodell), und ArtikelRow hat eine KategorienRow-Property, und davon der Name.
    Das Kranke daran ist, dass diese Binding-Möglichkeiten nicht im Property-Fenster angeboten werden.
    Dateien

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    und mein DatasetTester haste nun noch nichtmal angeguckt? :(


    also gut:

    XML-Quellcode

    1. <TextBlock x:Name="TxtBlkStatus1" Grid.Row="2" Width="384" Text="{Binding /Row.DTab2Row.SP2,Source={StaticResource DTab1ViewSource}}"/>
    Aber wieso machst du Wpf?
    Dein Projekt hat eine ganz schlimme Architektur, das wäre selbst unter Winforms zum Weinen.

    Studiere mal MVVM–Pattern (Josh Smiths Artikel), und guck dir die VBP - Wpf-Tuts an, die sind meist mittm MVVM-Pattern erstellt.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    ErfinderDesRades schrieb:

    und mein DatasetTester haste nun noch nichtmal angeguckt?

    Doch, habe ich. Mit Kopieren über USB Stick läuft es auch in meiner VS Umgebung. Übrigens das mit den verschiedenen Computern ist eine lange komplizierte Geschichte und gehört hier nicht her.

    ErfinderDesRades schrieb:

    Aber wieso machst du Wpf?
    Dein Projekt hat eine ganz schlimme Architektur, das wäre selbst unter Winforms zum Weinen.


    Ich habe mehrere Bücher mir fast durch gelesen, in denen MVVM nicht oder fast gar nicht erwähnt wurden. Darauf habe ich angefangen mit dem WPF programmieren und das lief ganz gut. Dann kam die Aufgabe für dieses Projekt und es raubte mir fast die Nerven und immer wenn ich eine Frage in einem Forum stellte, kam die Antwort MVVM. Doch noch dieses zu lernen, war ich nicht in der Lage. Ich steige da einfach nicht ganz durch und darum versuchte ich es so. Jetzt läuft da Programm auch endlich. Der Code sieht zwar für Profis komplett nach Müll aus, aber es produziert keine Fehler mehr. Ich hatte gedacht, mit diesem hier angefragten Problem nur noch ein paar Verfeinerungen zu erstellen. Und du konntest mir ja auch helfen. Danke vielmals für deine Hilfe. Dein Name wird dir in diesem Fall ganz gerecht.

    Tschüßi Lubeca