comx123
Goto Top

VB.NET - XML Daten lesen und in DataGrid schreiben

Hallo zusammen..

Bin neu hier und hab da ne kleine Frage, da ich nicht weiter komme.

Habe eine XML Datei die ich durch einen klick auf einen Button öffnen möchte, damit die Werte in ein DataGrid ausgegeben werden.
Hänge mal 2 Bilder mit der Oberfläche des Grid wo die Daten rein sollen, und den Ausschnitt aus der XML Datei wo die Daten eingelesen werden sollen.

Also hier soll das ganze ja rein:
Private Sub BtnOpenXml_Click(sender As Object, e As RoutedEventArgs) Handles BtnOpenXml.Click

End Sub

Bin auch im Bereich Programmierung Neu, und bräuchte evtl. Codebeispiele, wenn es machbar ist.

Danke schonmal.
xml
datagrid

Content-Key: 537517

Url: https://administrator.de/contentid/537517

Ausgedruckt am: 29.03.2024 um 00:03 Uhr

Mitglied: 142232
142232 21.01.2020 aktualisiert um 10:28:15 Uhr
Goto Top
Mitglied: ComX123
ComX123 21.01.2020 um 10:42:20 Uhr
Goto Top
Dank dir für die schnelle Antwort..
Zeile 3 hängt noch..
Das Grid sieht so im XML aus:
<DataGrid x:Name="DG_Lagerplaetze"

Habs so im Code stehen:
DataGrid.DataSource = DataSet.Tables[9]

Da is das DataGrid, das DataSource und die 9 Rot unterstrichen.
DataSource ist kein Member von DataGrid.

Habs auch mit DataGridView probiert.
Dann is nur das DataGtidView und die 9 Rot unterstrichen

Irgendwo ist noch der Wurm drin.
Mitglied: ComX123
ComX123 21.01.2020 um 10:47:53 Uhr
Goto Top
BEkomme auch nur das Loaded wenn ich auf den Button für den Code klicke:

Private Sub BtnOpenXml_Loaded(sender As Object, e As RoutedEventArgs) Handles BtnOpenXml.Loaded

End Sub

in deinem Beispiel steht Load?
Mitglied: 142232
142232 21.01.2020 aktualisiert um 10:54:11 Uhr
Goto Top
Zitat von @ComX123:
Habs so im Code stehen:
DataGrid.DataSource = DataSet.Tables[9]
Falsch, seh dir meinen Code mal genau an, vor allem der Typ der Klammern, das ist ja VB.Net und nicht c#!
Irgendwo ist noch der Wurm drin.
Ja falsch abgetippt face-smile.
in deinem Beispiel steht Load?
Das war nur ein Beispiel-Event das beim Laden der Form ausgeführt wird, kannst du ignorieren...
Mitglied: ComX123
ComX123 21.01.2020 um 10:54:24 Uhr
Goto Top
So sieht das aus
xml1
Mitglied: 142232
142232 21.01.2020 aktualisiert um 11:54:43 Uhr
Goto Top
Du musst da ja auch den Namen des DataGrids nehmen den du diesem vergeben hast ...

DeinNameDesDataGridViews.DataSource = ds.Tables(0)

"DataGrid" kannst du nicht als Namen hernehmen der Name ist schon für das Steuerelement reserviert.
Mitglied: ComX123
ComX123 21.01.2020 um 11:01:42 Uhr
Goto Top
Hab ich auch schon ausprobiert.. irgendwie will das nicht face-sad

Sollte vom Namen her passen.?
xml2
xml3
Mitglied: 142232
142232 21.01.2020 aktualisiert um 11:08:07 Uhr
Goto Top
Du hast es immer noch nicht verstanden! Den Namen des DataGridView-Steuerelements musst du da eintragen!!!!

screenshot

Und dein verwendetes "Loaded" Event ist ebenfalls falsch das wird ausgeführt wenn der Button selbst geladen ist, man oh man ... Mach mal einen vernünftigen Grundkurs!

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim ds As New DataSet()
        ds.ReadXml("D:\demo.xml")  
        dgv.DataSource = ds.Tables(0)
    End Sub

Ich bin raus.

Ciao.
Mitglied: ComX123
ComX123 21.01.2020 um 11:12:56 Uhr
Goto Top
Sorry.. Bin halt noch neu und gebe mein Bestes..
Da steht ja der Name.. In der Liste so wie bei dir, sehe ich den Namen hier nicht. Nur oben
xml4
Mitglied: ComX123
ComX123 21.01.2020 um 11:14:10 Uhr
Goto Top
Mit dem Click hatte ich es ja vorher schon.. .da aber auch nicht weiter gekommen.
Versuche es da nochmal.
Dank dir trotzdem für deine Geduld.
Mitglied: 142232
142232 21.01.2020 aktualisiert um 11:40:34 Uhr
Goto Top
Zitat von @ComX123:

Sorry.. Bin halt noch neu und gebe mein Bestes..
Da steht ja der Name.. In der Liste so wie bei dir, sehe ich den Namen hier nicht. Nur oben
Och mensch, siehst du's nich ??

Augen auf und das Hirn benutzen, lautet die Devise.
Mitglied: ComX123
ComX123 21.01.2020 um 11:26:02 Uhr
Goto Top
Das mit den Dreiecken kenn ich ja..
Hab bei allen Dreiecken schon durchgeguckt.
Hab da Kategorie, Name, Quelle.
Name finde ich nicht.. face-sad
Normal is ja Name und unten weiter Text und so, wenn ich mich richtig erinnere..
Dewegen wundert es mich ja, das ich es nicht finde.
Ich guck ma noch weiter.. finde ich schon.
Mitglied: 142232
142232 21.01.2020 aktualisiert um 11:39:21 Uhr
Goto Top
Naja das DataGridView sollte man "vorher" auch im Designer markieren bevor man sich dahin begibt....

Ich sach ja Freidaaaach 🐟
Mitglied: 142232
142232 21.01.2020 aktualisiert um 11:55:01 Uhr
Goto Top
screenshot


p.s. solltest du WPF benutzen muss es anders gemacht werden, dort gibt es ja aber auch kein DataGridView sondern nur ein DataGrid!
Mitglied: ComX123
ComX123 21.01.2020 um 11:45:15 Uhr
Goto Top
Hab ich ja..
Wenn ich z.B. auf die ListView klicke, springt er im XML Code zu ListView und in den Eigenschaften steht auch Typ ListView.
Gehe ich auf das Grid, springt er auch zu DataGrid, und in den Eigenschaften steht auch Typ DataGrid wie es oben auf dem Bild schon zu sehen ist..
Deswegen wundert es mich ja, das ich es nicht finde.
Also irgendwas übersehe ich hier.
Mitglied: ComX123
ComX123 21.01.2020 um 11:45:55 Uhr
Goto Top
Ja, nutze WPF.
Mitglied: 142232
142232 21.01.2020 aktualisiert um 11:52:36 Uhr
Goto Top
Zitat von @ComX123:

Ja, nutze WPF.
Dann sieht das folgendermaßen aus, hier ein Button mit dem Namen button1 und einem DataGrid mit dem Namen myDataGrid
    Private Sub button1_Click(sender As Object, e As RoutedEventArgs) Handles button1.Click
        Dim ds As New Data.DataSet
        ds.ReadXml("D:\demo.xml")  
        myDataGrid.ItemsSource = ds.Tables(0).DefaultView
    End Sub

Hättest du ebenfalls hier nachschlagen können:
https://www.c-sharpcorner.com/UploadFile/mahesh/load-an-xml-file-into-a- ...

Öfter mal auf Englisch suchen wenn du schon kein Handbuch nehmen willst.

Jetzt bist du dran.

Ciao.
Mitglied: ComX123
ComX123 21.01.2020 um 12:05:25 Uhr
Goto Top
Jetzt dann aber den Namen DG_Lagerplaetze nehmen, oder.?
Is ja der Name.
Button und Grid is umbenannt.
Da macht er wieder nen Fehler.
Wenn ich stattdessen DataGrid schreibe, macht er den gleichen Fehler.
Hmm..
xml5
Mitglied: 142232
142232 21.01.2020 aktualisiert um 12:14:47 Uhr
Goto Top
Zitat von @ComX123:

Jetzt dann aber den Namen DG_Lagerplaetze nehmen, oder.?
Solltest du jetzt zwischenzeitlich schon gelernt haben ...
Is ja der Name.
Button und Grid is umbenannt.
Da macht er wieder nen Fehler.
Wenn ich stattdessen DataGrid schreibe, macht er den gleichen Fehler.
Logisch weil das ein reserviertes Wort der Klasse "DataGrid" ist und kein Objekt mit diesen Eigenschaften.
Hmm..
Wieso fährst du mit der Maus nicht mal über die roten Kringel dann sagt er dir was ihm missfällt in einem Popup...
Mitglied: ComX123
ComX123 21.01.2020 um 12:16:08 Uhr
Goto Top
DG_Lagerplaetze wurde nicht Deklariert
Mitglied: 142232
142232 21.01.2020 aktualisiert um 12:22:56 Uhr
Goto Top
Zitat von @ComX123:

DG_Lagerplaetze wurde nicht Deklariert
Dann schau mal in deinen XAML Code ob das überhaupt umbenannt wurde und ob du den XAML-Code überhaupt schon gespeichert hast.

screenshot

Wenn das stimmt. Codefenster schließen oder manuell aktualisieren. Ansonsten hast du schon was andere DInge in deinem Projekt verbockt, könnte ich mir bei dir sehr gut vorstellen => neu anfangen.
Mitglied: 142232
142232 21.01.2020 aktualisiert um 12:31:16 Uhr
Goto Top
Zitat von @ComX123:

DG_Lagerplaetze wurde nicht Deklariert
Checke auch auf Leerzeichen am Ende des Namens im Designer und im XAML ... Lass den Namen durch die Intellisense raussuchen und ergänze mit Tab, dann kannst du sicher sein, wenn dann am Ende des Namens ein _ steht hast du ein Leerzeichen reingepfuscht.

Solche Sonderzeichen in Namen zu verwenden ist auch nicht gerade best practice.
Mitglied: ComX123
ComX123 21.01.2020 um 12:30:29 Uhr
Goto Top
Hmm... Wieso was umbenannt.? Es war ja ganze Zeit der gleiche Name im XML-Code. Da wurde nichts geändert.
Hab nochmal alles gespseichert, auch alles geschlossen und VS nochmal neu gestartet.
Im XAML-Code steht der Name so wie vorher auch DG_Lagerplaetze.
Macht er aber immer noch nicht.
Merkwürdig.
Gucke gleich nochmal in Ruhe durch. Bin grade mal ne Stunde afk.
Mitglied: ComX123
ComX123 21.01.2020 aktualisiert um 12:33:40 Uhr
Goto Top
ok, mach ich grade nochmal..

Wenn ich im VB Code DG_L... weg mache und nur DG schreibe, zeigt er keine weitere vervollständigung an.
Mitglied: 142232
142232 21.01.2020 aktualisiert um 12:33:44 Uhr
Goto Top
Ansonsten nimm den Unterstrich mal raus und benenne es bspw. DGLagerplaetze. Geht hier alles testweise einwandfrei.
Mitglied: 142232
142232 21.01.2020 aktualisiert um 12:36:35 Uhr
Goto Top
Zitat von @ComX123:

ok, mach ich grade nochmal..

Wenn ich im VB Code DG_L... weg mache und nur DG schreibe, zeigt er keine weitere vervollständigung an.
STRG+LEERTASTE drücken, ansonsten ist dein Projekt wohl im Eimer oder du schreibst das ganze in den völlig falschen Code-Abschnitt.

screenshot
Mitglied: ComX123
ComX123 21.01.2020 um 13:15:14 Uhr
Goto Top
Bekomme ich da einfach nicht angezeigt.. kenne das ja, das es dann in der Liste ausgewählt werden kann.
Schreibe das da auch in dem Code wo ich im XML auf den Button Doppel klicke. Also wo sich dann der VB-Code öffnet.
xml6
Mitglied: 142232
142232 21.01.2020 aktualisiert um 14:06:02 Uhr
Goto Top
So wie ich das sehe schreibst du das nicht in die Klasse des Fensters bzw. du musst zum Verweisen auf das Steuerelement noch die Parent-Class vor dem Steuerelementnamen vorne anstellen. Deswegen auch das nicht auflisten des Steuerlemennts in der aktuellen Klasse.
Poste doch mal den ganzen XAML Code.
Mitglied: ComX123
ComX123 21.01.2020 aktualisiert um 14:16:54 Uhr
Goto Top
<UserControl x:Class="UserControlEbenenTemplates"  
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"   
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"   
             xmlns:local="clr-namespace:PROCESS_MX_Regalerstellung"  
             mc:Ignorable="d"   
             d:DesignHeight="450" d:DesignWidth="800">  
    <Grid Background="#D7E2F7" ShowGridLines="False">  
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="220"/>  
            <ColumnDefinition Width="*"/>  
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="35"/>  
            <RowDefinition Height="30"/>  
            <RowDefinition Height="30"/>  
            <RowDefinition Height="*"/>  
            <RowDefinition Height="30"/>  
            <RowDefinition Height="*"/>  
        </Grid.RowDefinitions>
        <Label VerticalContentAlignment="Center"  FontWeight="Bold" Margin="0,7,0,3" x:Name="Lbl_EbeneSelected"  Content="{Binding ID, Mode = OneWay}" Grid.Column="0"  Grid.Row="0"/>  
        <StackPanel Margin="0,7,0,3" Orientation="Horizontal" Grid.Column="1"  Grid.Row="0">  
            <Label VerticalContentAlignment="Center" Content="ID"  FontWeight="Bold" Margin="0,0,0,0"/>  
            <TextBox x:Name="TxBx_ID" Width="120" VerticalContentAlignment="Center" Text="{Binding ID, Mode = TwoWay}"/>  
        </StackPanel>
        <ListView  x:Name="TemplateItems" IsSynchronizedWithCurrentItem="True"  VerticalAlignment="Stretch" Margin="8,3,8,8" Grid.Column="0" Grid.Row="1" Grid.RowSpan="5">  
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="ID"  DisplayMemberBinding="{Binding ID}" />  
                </GridView>
            </ListView.View>
            <ListBox.ContextMenu>
                <ContextMenu>
                    <MenuItem Header="Löschen" Name="CmDelete" Click="BtnDelete_Click"/>  
                    <MenuItem Header="Neu" Name="CmNew" Click= "BtnAdd_Click"/>  
                </ContextMenu>
            </ListBox.ContextMenu>
        </ListView>

        <Label Content="Lagerplätze" VerticalAlignment="Center" Grid.Column="1" Grid.Row="1" FontWeight="Bold"/>  
        <StackPanel Orientation="Horizontal" VerticalAlignment="Stretch" Margin="217,0,3,0" Grid.Row="2" Grid.ColumnSpan="2">  
            <Button Name="BtnLpAdd" Width="100" Margin="3" Content="LP einfügen"></Button>  
            <Button Name="BtnLpDel" Width="100" Margin="3" Content="LP löschen"></Button>  
            <Button Name="BtnLpUp" Width="100" Margin="3" Content="LP nach oben"></Button>  
            <Button Name="BtnLpDown" Width="100" Margin="3" Content="LP nach unten"></Button>  
        </StackPanel>
        <DataGrid x:Name="DG_Lagerplaetze" Margin="217,10,11,25" Grid.Row="3" HorizontalAlignment="Stretch" AutoGenerateColumns="False" AlternatingRowBackground="#fadb92" AlternationCount="2" Grid.ColumnSpan="2" Grid.RowSpan="2" >  
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding Name}" Header="Name" />  
                <DataGridTextColumn Binding="{Binding Index}" Header="Index" />  
                <DataGridComboBoxColumn x:Name="BEMASSUNG" SelectedItemBinding="{Binding Bemassung}" Header="Bemassung" >  
                    <DataGridComboBoxColumn.EditingElementStyle>
                        <Style TargetType="ComboBox">  
                            <Setter Property="IsDropDownOpen" Value="True" />  
                        </Style>
                    </DataGridComboBoxColumn.EditingElementStyle>
                </DataGridComboBoxColumn>
                <DataGridTextColumn Binding="{Binding Teilebene}" Header="Teilebene" />  
                <DataGridTextColumn Binding="{Binding Teilplatz}" Header="Teilplatz" />  
                <DataGridTextColumn Binding="{Binding Lp}" Header="Lagerplatzcode" />  
                <DataGridTextColumn Binding="{Binding EP_X}" Header="EP-X" />  
                <DataGridTextColumn Binding="{Binding EP_Y}" Header="EP-Y" />  
                <DataGridTextColumn Binding="{Binding ADD_Z}" Header="ADD-Z" />  
                <DataGridComboBoxColumn x:Name="DGPLATZTYP" SelectedItemBinding="{Binding Platztyp}" Header="Platztyp" >  
                    <DataGridComboBoxColumn.EditingElementStyle>
                        <Style TargetType="ComboBox">  
                            <Setter Property="IsDropDownOpen" Value="True" />  
                        </Style>
                    </DataGridComboBoxColumn.EditingElementStyle>
                </DataGridComboBoxColumn>
            </DataGrid.Columns>
        </DataGrid>
        <Label VerticalContentAlignment="Center"  VerticalAlignment="Center"  FontWeight="Bold" Grid.Column="1" Grid.Row="4" x:Name="Lbl_Darstellung" Content="Graphische Darstellung"/>  
        <Border Grid.Column="1" Grid.Row="5" Margin="0,0,8,8"  BorderBrush="Gray" BorderThickness="1">  
            <Canvas x:Name="CanvasDraw" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"  Background="WhiteSmoke"/>  
        </Border>
    </Grid>
</UserControl>

und das ist der XML Code von dem Button zum öffnen der XML

<Page x:Class="Page_LeftContent"  
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"   
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"   
      xmlns:local="clr-namespace:PROCESS_MX_Regalerstellung"  
      mc:Ignorable="d"   
      d:DesignHeight="450" d:DesignWidth="800"  
      Title="Page_LeftContent">  
    <Grid>
        <StackPanel Margin="0,20,0,0" HorizontalAlignment="Center"  Orientation="Vertical">  
            <Button  Width="130" Margin="5,2,5,2" Name="BtnOpenXml" Content="Xml Datei öffnen"></Button>  
            <Button  Width="130" Margin="5,2,5,2" Name="BtnSaveXml" Content="Xml Datei speichern"></Button>  
        </StackPanel>
    </Grid>
</Page>
Mitglied: 142232
142232 21.01.2020 aktualisiert um 14:37:09 Uhr
Goto Top
Alles klar, dein DataGrid ist ja in einem UserControl enthalten und nicht im HauptCode, also musst du den InstanzNamen des UserControls auf deiner Form dem Namen des DataGrids vorneanstellen damit der Code ja weiß welches DataGrid in welchem Control du ansprechen möchtest.

NameDerUserControlInstanz.DG_Lagerplaetze.ItemSource = .....................


Das zum Thema Programmiergrundlagen zum Thema Objekte und "Klassen", solltest du dir am Wochenende mal reinpfeifen.

Die Programmierweise oben wiederspricht aber eigentlich dem MVVM Konzept von WPF das mit Klassen und Objekten die Views mit Daten versorgen. Da solltest du dir in Zukunft mal das hier durchlesen.
https://www.dotnetforall.com/wpf-mvvm-practical-data-application-example ...
Mitglied: ComX123
ComX123 21.01.2020 um 15:02:43 Uhr
Goto Top
Will nicht so wirklich.. hab einiges probiert.. face-sad
Ja, und ich weiss, ich muss noch einiges lernen.. ein WE reicht da wohl nicht.
xml7
Mitglied: ComX123
ComX123 21.01.2020 um 15:04:22 Uhr
Goto Top
mach ich auf jeden fall... thx
Mitglied: 142232
142232 21.01.2020 aktualisiert um 15:28:46 Uhr
Goto Top
Das ist nicht der InstanzName sondern der Name des Templates. Von einem Template erzeugt man ja eine Instanz im XAML und der sollte man im XAML einen eigenen Namen geben.
Je nachdem wo das Control liegt ist auch evt ein zusätzlicher Klassenname anzugeben, je nachdem wie verachachtelt man das ganze angelegt hat. Nur fehlen hier leider die Bestandteile bzw. der XAML des MainWindows.
Mitglied: ComX123
ComX123 21.01.2020 um 15:35:20 Uhr
Goto Top
Ok, ich guck nochmal wegen dem Klassennamen und dem Control.. Muss das ja irgendwie auch mal selber auf die Reihe bekommen.
Ich versuch das jetzt nochmal, und meld mich morgen evtl. nochmal.
Danke schonmal für die Hilfe.!
Mitglied: 142232
142232 21.01.2020 aktualisiert um 16:05:16 Uhr
Goto Top
Vielleicht verstehst du den Objekt-Zusammenhang hiermit etwas besser

screenshot

Das x:Name="MyControl" musst du entweder selbst im XAML hinzufügen oder im Eigenschaften-Explorer rechts einen Namen vergeben, das macht der Designer nicht von selbst wenn man es per Drag n' Drop reinzieht.

screenshot


https://www.wpf-tutorial.com/usercontrols-and-customcontrols/creating-us ...