Combobox mit Xml Werten füllen

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Alex - AK.

    Combobox mit Xml Werten füllen

    hallo

    kann mir jemand helfen mit dem umsetzten eines kleinen Programms

    es funktioniert alles bis auf die combobox

    ich weiß nicht wie ich das umsetzen soll,
    hab schon alles mögliche ausprobiert,

    ich hab auch nach dem Thema gegoogelt ohne Erfolg
    ich hoffe das mir hier einer helfen kann

    um die funktionsweise mit XML besser zu verstehen

    Download Projeckt
    dl.dropbox.com/u/51858616/Download/XML-Test.rar

    VB.NET-Quellcode

    1. 'imports
    2. Imports System.Xml
    3. Imports System.Xml.Serialization
    4. Public Class Form1
    5. 'Error
    6. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    7. lblError.Text = ""
    8. End Sub
    9. 'Speichern
    10. Private Sub cmdSpeichern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSpeichern.Click
    11. Try
    12. Dim Kunde As New clsKunde()
    13. With Kunde
    14. If Me.optFrau.Checked = True Then
    15. .Geschlecht = "Frau"
    16. Else
    17. .Geschlecht = "Herr"
    18. End If
    19. .Vorname = txtVorname.Text
    20. .Zuname = txtZuname.Text
    21. .Strasse = txtStrasse.Text
    22. .Plz = txtPlz.Text
    23. .Ort = txtOrt.Text
    24. If chkInfo.Checked = True Then
    25. .Infopost = "Wahr"
    26. Else
    27. .Infopost = "Falsch"
    28. End If
    29. Dim objDatei As _
    30. New System.IO.FileStream(Application.StartupPath & "\Testxml.xml", _
    31. IO.FileMode.Create)
    32. Dim objSerializer As _
    33. System.Xml.Serialization.XmlSerializer
    34. objSerializer = New _
    35. System.Xml.Serialization.XmlSerializer(Kunde.GetType)
    36. objSerializer.Serialize(objDatei, Kunde)
    37. objDatei.Close()
    38. End With
    39. Catch ex As Exception
    40. lblError.Text = "Error"
    41. 'MessageBox.Show(ex.Message)
    42. End Try
    43. End Sub
    44. 'Laden
    45. Private Sub cmdLaden_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLaden.Click
    46. Try
    47. Dim objSerializer As XmlSerializer
    48. Dim objStream As System.IO.FileStream
    49. Dim objGelKunde As clsKunde
    50. objStream = _
    51. New System.IO.FileStream(Application.StartupPath & "\Testxml.xml", _
    52. IO.FileMode.Open)
    53. objSerializer = New XmlSerializer(GetType(clsKunde))
    54. objGelKunde = objSerializer.Deserialize(objStream)
    55. With objGelKunde
    56. If .Geschlecht = "Frau" Then
    57. optFrau.Checked = True
    58. Else
    59. optHerr.Checked = True
    60. End If
    61. txtVorname.Text = .Vorname
    62. txtZuname.Text = .Zuname
    63. txtStrasse.Text = .Strasse
    64. txtPlz.Text = .Plz
    65. txtOrt.Text = .Ort
    66. If .Infopost = "Wahr" Then
    67. chkInfo.Checked = True
    68. End If
    69. End With
    70. objStream.Close()
    71. Catch ex As Exception
    72. lblError.Text = "Error"
    73. 'MessageBox.Show(ex.Message)
    74. End Try
    75. End Sub
    76. 'Klasse
    77. Public Class clsKunde
    78. Public Geschlecht As String
    79. Public Vorname As String
    80. Public Zuname As String
    81. Public Strasse As String
    82. Public Plz As String
    83. Public Ort As String
    84. Public Infopost As String
    85. End Class
    86. 'Leeren
    87. Private Sub cmdLeeren_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLeeren.Click
    88. txtVorname.Clear()
    89. txtZuname.Clear()
    90. txtStrasse.Clear()
    91. txtPlz.Clear()
    92. txtOrt.Clear()
    93. End Sub
    94. End Class



    XML-Quellcode

    1. <?xml version="1.0"?>
    2. <clsKunde xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    3. <Geschlecht>Herr</Geschlecht>
    4. <Vorname>Vorname</Vorname>
    5. <Zuname>Zuname</Zuname>
    6. <Strasse>Straße 1234</Strasse>
    7. <Plz>123456</Plz>
    8. <Ort>Ort</Ort>
    9. <Infopost>Wahr</Infopost>
    10. </clsKunde>
    Dateien
    • XML-Test.rar

      (71,88 kB, 146 mal heruntergeladen, zuletzt: )
    Ich habe mich kürzlich auch mal mit XML befasst, allerdings habe ich das nicht mit einer
    ComboBox gemacht, ich habe das mit einer DataGridView gemacht mit nem Dataset,
    aber vieleicht kannst du damit was anfangen? Die Projektmappe habe ich in dem
    Thread auch hochgeladen(Post #25).

    [VB 2010] Multiple Chice Fragen in gemischter Reihenfolge mit anschließender Auswertung mit Microsoft Visual Basic 2010 Express

    mfG

    Derfuhr
    in meinem label steht folgendes
    System.Data.DataRow View

    warum ???


    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. Dim ds As New DataSet
    4. ds.ReadXml("C:\Users\Alex\Desktop\Test1Kopie.xml")
    5. With Me.ComboBox1
    6. .DataSource = ds.Tables("Auswahl")
    7. .DisplayMember = "Display"
    8. .ValueMember = "Value"
    9. End With
    10. End Sub
    11. Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    12. 'MessageBox.Show(CType(sender, ComboBox).SelectedValue.ToString())
    13. Label1.Text = (CType(sender, ComboBox).SelectedValue.ToString())
    14. End Sub
    15. End Class



    XML-Quellcode

    1. <?xml version="1.0"?>
    2. <XML>
    3. <Auswahl>
    4. <Display>Eintrag1</Display>
    5. <Value>Hallo</Value>
    6. </Auswahl>
    7. <Auswahl>
    8. <Display>Eintrag2</Display>
    9. <Value>Hallo2</Value>
    10. </Auswahl>
    11. <Auswahl>
    12. <Display>Eintrag3</Display>
    13. <Value>Hallo3</Value>
    14. </Auswahl>
    15. </XML>
    ich möchte das mit einer combobox machen

    so sollte die xml aussehen


    XML-Quellcode

    1. <clsKunde xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    2. <Auswahl>
    3. <Display>Eintrag1</Display>
    4. <Value>Hallo</Value>
    5. <Geschlecht>Herr</Geschlecht>
    6. <Vorname>Vorname</Vorname>
    7. <Zuname>Zuname</Zuname>
    8. <Strasse>Straße 123</Strasse>
    9. <Plz>123456</Plz>
    10. <Ort>Ort</Ort>
    11. <Infopost>Wahr</Infopost>
    12. </Auswahl>
    13. <Auswahl>
    14. <Display>Eintrag2</Display>
    15. <Value>Hallo</Value>
    16. <Geschlecht>Herr</Geschlecht>
    17. <Vorname>Vorname</Vorname>
    18. <Zuname>Zuname</Zuname>
    19. <Strasse>Straße 123</Strasse>
    20. <Plz>123456</Plz>
    21. <Ort>Ort</Ort>
    22. <Infopost>Wahr</Infopost>
    23. </Auswahl>
    24. </clsKunde>



    und da ich in sachen vb mich erst seit kurzem damit befasse, weiß ich nicht wie ich es umsetzen soll


    eigentlich solls ja ganz simpel sein
    ungefär so

    prntscr.com/jiau3

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Alex - AK“ ()

    Es ist ja eigentlich simpel, wenn mann weiss was zu tun ist. So kann man "rows"
    oder auch einzelne "Einträge" aus nem DataSet/DataTable in eine ComboBox laden.

    VB.NET-Quellcode

    1. Imports System.Xml
    2. Public Class Form1
    3. Dim xmlFile As XmlReader
    4. Dim ds As New DataSet
    5. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    6. xmlFile = XmlReader.Create("test.xml", New XmlReaderSettings())
    7. ds.ReadXml(xmlFile)
    8. xmlFile.Close()
    9. For i As Integer = 0 To ds.Tables("Auswahl").Rows.Count - 1
    10. Dim cRow As DataRow = ds.Tables("Auswahl").Rows(i)
    11. ComboBox1.Items.Add(CStr(cRow("Display")) & ";" & CStr(cRow("Value")) _
    12. & ";" & CStr(cRow("Geschlecht")) & ";" & CStr(cRow("Vorname")) _
    13. & ";" & CStr(cRow("Zuname")) & ";" & CStr(cRow("Strasse")) _
    14. & ";" & CStr(cRow("Plz")) & ";" & CStr(cRow("Ort")) & ";" & CStr(cRow("Infopost")))
    15. Next
    16. End Sub
    17. End Class


    Als kleinen Tip nebenbei, wenn du die XML Datei von Hand tippst dann denke
    daran, das man in XML Umlaute und Sonderzeichen genau wie in HTML schreibt!
    (hab dein XML Code kopiert und es kam eine Fehlermeldung wegen dem "ß" beim laden)

    devtrain.de/artikel_296.aspx

    mfG

    Derfuhr

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

    hm eigentlich ist es noch nicht das was ich mir so vorgestellt
    das in der Combobox der Eintrag1 - Eintrag3 zusehen ist
    und in den Textboxen zu dem Eintrag1 dann der Name und Zuname Ausgegeben wird
    hab schon alles ausprobiert ich bekomm es einfachnicht hin

    das alles in einem Array gespeichert wird und man es jederzeit erweitern kann
    das alles nicht so kompliziert wird wen man was erweitern möchte

    XML-Quellcode

    1. <?xml version="1.0"?>
    2. <Array-Combobox-Item>
    3. <cls-Auswahl>
    4. <Combobox-Eintrag>Eintrag1</Combobox-Eintrag>
    5. <TextBox1-Ausgabe>Vorname1</TextBox1-Ausgabe>
    6. <TextBox2-Ausgabe>Zuname<1/TextBox2-Ausgabe>
    7. </cls-Auswahl>
    8. <cls-Auswahl>
    9. <Combobox-Eintrag>Eintrag2</Combobox-Eintrag>
    10. <TextBox1-Ausgabe>Vorname2</TextBox1-Ausgabe>
    11. <TextBox2-Ausgabe>Zuname2</TextBox2-Ausgabe>
    12. </cls-Auswahl>
    13. <cls-Auswahl>
    14. <Combobox-Eintrag>Eintrag3</Combobox-Eintrag>
    15. <TextBox1-Ausgabe>Vorname3</TextBox1-Ausgabe>
    16. <TextBox2-Ausgabe>Zuname3</TextBox2-Ausgabe>
    17. </cls-Auswahl>
    18. </Array-Combobox-Item>



    So wie hier aber alles aus einer xml ausgelesen wird

    VB.NET-Quellcode

    1. Public Class frmCombo
    2. Private Sub frmCombo_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. Dim marr As New List(Of comboItem)() ' besser, da typisiert
    4. marr.Add(New comboItem With {.Id = 1, .Text = "Eintrag1", .Description = "Dies ist der Langtext zu Eintrag1"})
    5. marr.Add(New comboItem With {.Id = 2, .Text = "Eintrag2", .Description = "Dies ist der Langtext zu Eintrag2"})
    6. marr.Add(New comboItem With {.Id = 3, .Text = "Eintrag3", .Description = "Dies ist der Langtext zu Eintrag3"})
    7. ComboBox1.DisplayMember = "Text"
    8. ComboBox1.ValueMember = "Id"
    9. ComboBox1.DataSource = marr
    10. End Sub
    11. Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    12. Dim selectedItem As comboItem = DirectCast(ComboBox1.SelectedItem, comboItem)
    13. TextBox1.Text = selectedItem.Description ' DirectCast ist hier besser
    14. PictureBox1.Image = ImageList1.Images(selectedItem.Id) ' hier
    15. End Sub
    16. Public Class comboItem
    17. Public Property Id As Integer
    18. Public Property Text As String
    19. Public Property Description As String
    20. End Class

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Alex - AK“ ()

    nunja - ist strict Off geproggt, benötigt ca. das 5-fache an Code, und enthält so übersichtliche "Schönheiten" wie diese:

    VB.NET-Quellcode

    1. Dim TrefferListe = From Personen In XMLDoc.<Werte> _
    2. Where Personen.<Info>.Value = ComboBox1.SelectedItem _
    3. Select X = Personen.Attribute("PosX").Value, _
    4. Y = Personen.Attribute("PosY").Value, _
    5. Zeit = Personen.<Zeit>.Value, _
    6. Name = Personen.<Name>.Value, _
    7. Info = Personen.<Info>.Value


    Aber vlt. kommsteja nochmal auf Daten laden, speichern, verarbeiten zurück, wenns mal drum geht, Daten auch einzugeben - kann ja sein ;)
    Da schreibst du sonst nämlich nochmal das 5-fache an Code - bist also beim 10-fachen (weil bei Daten laden, speichern, verarbeiten braucht man immer nur 3 weitere Zeilen dafür).

    Dir ist schon bekannt, dass Strict Off prinzipiell GurkenCode ist (mit Ausnahme von InterOp-Geschichten)?

    Option Strict On!

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