DataTables an Comboboxen binden

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    DataTables an Comboboxen binden

    Hallo!

    Ich habe mehrere DataTables die untereinander je eine Beziehung haben!

    Nun wollte ich gerne ein Element jeder Tabelle in je einer Combobox darstellen!

    Ich kann das bis jetzt nur so bewerkstelligen:

    VB.NET-Quellcode

    1. Private Sub ComboBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox2.SelectedIndexChanged
    2. For Each _row As JSON_DataSet.json_releasegroupRow In _dt_releasegroups.Rows
    3. If _row.cID = CInt(ComboBox2.Text) Then
    4. ComboBox3.Items.Clear()
    5. For i = 0 To _row.cReleasegroupCount
    6. ComboBox3.Items.Add(i)
    7. If _round = False Then
    8. ComboBox3.SelectedIndex = 0
    9. End If
    10. Next
    11. End If
    12. Next
    13. End Sub


    Wie kann ich die Comboboxen nun an die DataTables binden?
    Ich wollte nur die jeweiligen "counts" ausgeben lassen. Das ich in CB1 ein "Count" auswähle..das gibt mir dann die "Counts" von CB2 usw.

    Anbei hab ich ein Bild meiner DataTables!
    Dateien
    • DataSet.bmp

      (2,76 MB, 9 mal heruntergeladen, zuletzt: )
    Ich blick leider nicht, was Du vorhast.
    Sind die Counts (= Anzahl?) per Expression automatisch berechnete Spalten? Es sollte eigentlich durch entsprechendes DataBinding klappen, dass man einen ComboBox-Wert auswählt und das Ergebnis dann in einem anderen CE angezeigt wird.
    Vereinfachen wir das Modell mal etwas: ein Künstler hat mehrere CDs, eine CD hat mehrere Tracks - falls das ein Ausschnitt aus Deinem Modell wäre (obwohl Du die Beziehung zu haben scheinst: ein Künstler hat mehrere Tracks, ein Track hat mehrere CDs, aber vielleicht versteh ich Dein Datenmodell auch falsch). Jetzt bindest Du Deine Künstler an ComboBox1, Deine künstlerabhängigen CDs ab ComboBox2 und Deine CD-abhängigen Tracks an ComboBox3. Du kannst entweder eine berechnete Spalte im tDS-Designer anlegen und diese nutzen, sobald Du etwas aus den ComboBoxen auswählst, oder Du nutzt LINQ, um mit GetXYZRows.Count an die Anzahl der untergeordneten Tabelle zu kommen.
    Warum werd ich das Gefühl nicht los, dass das alles nicht ist, was Du vorhast?
    btw: Was ist _round?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    unabhängig vom Datenmodell - mach das im Designer, indem du die ggfs eingeschachtelten) Tabellen aus dem Datenquellfenster aufs Form ziehst. Da kriegst du erstmal 7 DGVs (+ 7 BindingSources, und die sind wichtig!)
    anschliesend kannste die DGVs entfernen und durch eine ebenso gebundene Combobox ersetzen.
    gugge vier Views-Videos, "ParentChild-View".
    OK, ich hab jetzt die Comboboxen an die BindingSource gebunden!

    Aber wie bzw. wann werden die Comboboxen aktualisiert bzw. mit Daten gefüllt?
    Ich hab ja von Programmstart an die Bindungen..dann sind aber noch keine Daten in den Tabellen..folglich bleiben die Comboboxen auch leer!
    Wenn ich aber nun die DataTables mit Daten fülle, also die Daten einlese, bleiben die Comboboxen weiterhin leer!
    Muss ich nach dem Einlesen in die Tables die CB neu binden, oder nur refreshen? Passiert das nicht automatisch bzw. warum halten sich die CB nicht automatisch aktuell??
    Wenn die Comboboxen korrekt per BindingSource an die DataTables gebunden sind, aktualisieren sich die ComboBoxen automatisch, wenn die DataTables Futter bekommen. Mach mal bitte nen Screenshot Deiner ComboBox-Bindung, die sich hinter dem Smarttag versteckt, also sowas:
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Hab jetzt den nicht funktionierenden Teil mal als Projekt angefügt!
    Also beim klick auf den Button holt er sich eine JSON Antwort aus dem Internet vonne Datenbank..
    ..diese wird dann in JSON_ROOT geparst..
    ..danach schreibt er die Daten in die DataTables..(wobei die letzten beiden Einträge nicht wichtig sind..also: cRecording, cReleasegroup, cRelease, cTrack etc.!)

    Nun hab ich als Debug Ausgabe die jeweiligen Daten die inne Combobox sollen..also die jeweilige Anzahl an Releases, Tracks, Mediums, etc.
    ich bekomme des aber nicht gebunden..die Comboboxen, und auch die DGVs bleiben leer!
    Wenn nun irgendeine Combobox des Value ändert soll er sich aus der DataTable die dazugehörigen Daten suchen..mpf


    Hier der Code als Text:
    Form1:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Net
    3. Imports Newtonsoft
    4. Public Class Form1
    5. Dim Fingerprint As String = "AQADtInEKcqYCTojIe9R1stwe0FyMUcOoz9OoyIVw_I_NGETfAyu5UHuGH0O8ZiOyCzxHz9-NB_CQz4RJlKYHG2UGTlZFfoUSUj_4sosPGmNm_Ax9wryjMcHfQni5-iqPHBunDm-D08njJJwHv0bfEfOqJCPMBz1oX7xPjiaZ0d4HUl-NJpjlFEiXGzwCw6dEW_SBjmSo7Q4NKQSBrkIpTnyMZpwTTuaMyTutMHRZU3xHzPx5TiPMLsgHWFHyfjw5hmuC1ew_cGjc4h3aBOHJmayYA_-CM3xpHB_FMzhUEyMXjm-E7k_NLuKrgKfEffxp8KXJ0Hzow_u4xrRXDnCQ0dMHVce9PHg_Ah_yE2OPOgponka4EeYSgr0KnDMVNBoNcF0mFzxCoqP9C2qC19JdJ0cfHtWhD10Gunz4j8-XEGjPEa43kieGc9xfrhyCc2ZG3XC4zlyNLmiBVW8IH8Gpj7u48oQ_vjR84GWRssYXMeP_BycNEpwyjgP3g8upUzQ7mh6fBee5xwuSUmJhktI9DiOpEcY5T18kagcPRH4kfhxKfHxKEjnDsmPK8cZKcF9VHrgg-k7I_nwtch59CHhHD9SJy-0PwhtEQ13PEefonke5NIFnS1yHaeNlw2qHs1kPKdwHdUXNJ-RoydcfcLvoglHyD94HU0qPqiIi_jh5-CTBLle9A-utfAfdFKOHz8uSuGHZoyOcEfyJMSVgfYzNEcpSUe-ZDnkoVmW8uizNJBe1IfzQ3x0hKQenA2aLzx6PFuKJiYV5EfyG2WTJ7gU_GyRX9CXHGkWPfjB73ikHHVzpFmReC_6487xHbWkZ2gc5scVfAiTaFkOKdKN6wm-48f34eFRPimaKnvwC8dNxWiulKieFB_i58IXPniWB83R4yFGLkp2TEqVq2j2Dz-SIyjJBs0poiJXNB--B_mRXGio0ygf_HhxJjma6wGzaEeO89CnB70IhyKeJPB49Inw5MLpok-G5juebQskx4_w8NBnwznDI9-ORxaeKEdITheaKsHzQv9ROWwOLUkOmjny7WhKhNyD-iFU8Ue-HG18XCe-6GhTH1kySgnUN8cDLXoQng-6KMmH9hFGHV9I7IfXHfeReDyyB9fR50HDp0I-z1CZ_OizjAhzxF-EH5r74TEeQZMfoWeQvkerBLlICZr0BqnAow8bnAkbvLlxHXkWiH-Q40ukHJ-CXoiUF2-gUseXZ0QeJUf5jEFTLXiSID-aiNl2TIpuvPME5tBSHg9R-hB5XCSJRs3iBCdU5rg4WEf2SME1hDxSBuX0BP2M2h3OH5fQZ2AyycS3pAryE6oe5EcvMuB19FIenD6SaNONNCramfgePHiU4n5w70jWI1qObuLxLLnwBF2zo_GUI5-AZJkWCS2vBF9oBf3QaAruJWhmkUE7m0hU5oiJLw9xJx16Em-CZos-TcijHKqONHmaIKcIHY-Q6cUTJXnwi4jRvNB5oYn04FlyIz_6xGg-nAf744nOoJKeoFGzBsePJxliStU2aOcR5jgX40umI_shf0MoKsvh5mhRmVFMNNJ45Icm1kTjI0ysI8uYPAn-Q0udoX-HZ4dmp0H6HJVI4cmaHGe8gD965Ie4sOwQPg_OENce1M0J_ygRLzv040vyhOg5NBsTeniK52iib0QXJmvwG7TRrM9RJyKPQ-PRZOukgnQrNP3R49GP_MckPEk2wS_643lwJuSO-kQjLXgmHX9wKTumhIpGhCsgTb7xI6QU-Aevp_j1wGKPNGJCJOvwD9dxpzg_PDuSXUeYWDseiceTPHiYC9SZ4y-eHXmPUxoutdB-NLzxLcRDnEOfPEnRpM2IRxn-BydTVM4JH8w1B9mjGPeNJyFxDTcDXx9O0cSDXPqgE1n4rBPuwz7-Izz0TZkQKo1yw4yJS4ng6sCJ_MXOHH4r6NGjDf2PH_WPhqMT5Fk6zACZj8OT5AlCC87xHtoz48fz4DKJP-iD5jgpQX-CT8kHJ-FHPAueI7_xE1MJ7_BVPImSYJakE-kzONGhSx9CVTOuVsZzLkH5gsnxCI9yPMEZXIke_FFQ0Reah4pxHkeyIsyIL8ezB81E9B3uGPmzQeeOUNKn4N8FV8eP8Md9Qb_wKh_mJ4Y-HhfCP4Vfoj6uC0-SjMUn4RfCEBqP_Di-TIlR5Raa_Mihv0X6BOeK4wjZH1OWPSm-NGNQG-Hx40uOc8ezxUEz7UMiakbI4jy-49qHK8clHo8S56gvOCkrhHoK5goOjTquF6GkwzesZsjzQN4uXEhDyUcf5HlwJGdYoY2fwFPk6OgPnDxOFU_4CHnCHJpeMCmRX8jnQb9QkTIsJsuRa_hNxPuh5XKQ7wz6HL6QqnlQ7c0G7UHzHOfxBvqnIyQTGdQfGb2M_FA1hI0uwauXop-FL0pwSeHwX0Gy_AiJKx-uyMRvdWAehWhK5cGXI4_yI2Eu4iHT4DKFXg-aLEou5DwugcmN02i-PNB1PEvQ5DJ6HaeSEM_xHJctfIm8JHgOLT_Cx3im4pmOfmiippNwLRd-BfECLRcRvka1RYeVj2D0yULoKOrQFL-hMznURTSeNcQf5EajG6F1XEvm4oe-KainoDmRneg_oVmPL6JRDo1mXDgTRc1w5kgWRkfo1cZP_MK1F2eOJmaqoN7xx2iUk0jWccqRW8Ev_AkYSoep5CjlzDi-I9_oIEkTHsdzeFaOZ0E-XUj2J3jDFB7zo1KED7vxT0LJzEYYRod-IyfRKZLRdHuQMcv04RQb4UfzH2XGBOOdI8-FH5FSHaLTEqGVeLg_PGjUZdZQScpxPch16MR3GtsY6GSy4TQRTkmGKSOd4T_OLUd-QZMJT4o0hMxl8NrxpEvQn_CzHEAMIsAAygCgChgBoDIAEAmo49QIpgRSSAKhnAKGGIaQUcYxgBQQABDCgBJGCaCMYEgIAhgAzACFDEOAI2CQQAogZAw02BjiATLCGEAQJMIQICFCTCCBhDGCECYMUsgoAC0EAhEAASBKAQSBEMoAhgAQgkEFFDJIEMWIFQAJA5wgwAlBjCQAEAA0SE0YABAVwBgnkBMIQCQIRIIgQZgwikEFhDHGKECgM0ICAYpQgBmgABMQEWIUYEIQjAwwABAxEKBEACIYFwYAwgQgBihkABPEOEAMI4AqIwhAwCAiAEDYCCcYQZgQo4RQiCEChAFEEEKlAsQAA4kwEEgBgGNEIQAMJQIBIpyiBgEBABICKSAMUAQJBQgSwgHFEBKIAQIUUcIQRgRQChEBBLBKECUMAAAJpIwDyhmGgCGMIAWIEMB4YZCQwhBDjEAaAUGEQEQBYCEkTBALAGIAACqNFQYIAAQhiCkkCIAYCQIKMIAA4AQCAgGiFJGMEUCQAYI4IBwwyikBDVDMIoQEJAAASAACziAhgBFCMCEJAwoZKrwgggFBpECGCOEMQkARAZBxABhBACAMMMEEAIIJQQAyRiFAACBAEKQMIsQJQoAgiAgCgAFGIQGcAgwpKYQRCBGjBCHGEKYAUIIIgRByBjggmNEEGCAMAAYAYowCSBimBCJKEQgMIkQBopgyhhEhCDLIAYcIcOJBRgkwwgnAFEFCAQEAFQIoAZwjCgDBjDBCCAKQQIAygzBIzDwiABSIIgaIMMISaASBCAGjCCJQEEaQMgIqoxSUAClkpPEAAGGZAEgAQxAzCAkDhEEEACQAAQoIRiwBxABhnIMCCUKAFYoAIQChRBgjACECKECZAMABZxBhlhoChEVMAKSEMAgRAYiQABCBnCUIGAiIFcAARJSAwjEDgEKIESCEgAwZSYUTFknjCDAKAECwEEYa4IEAThAADAAKiAWAJAYZKg0AACAABEIAGCYMcAA"
    6. Dim Duration As String = "197"
    7. Dim _fp() As String = {Duration, Fingerprint}
    8. Dim JSON_ROOT As c_JSON_ROOT = Nothing
    9. Dim _dt_results As New JSON_DataSet.json_resultDataTable
    10. Dim _dt_results_row As JSON_DataSet.json_resultRow
    11. Dim _dt_recordings As New JSON_DataSet.json_recordingDataTable
    12. Dim _dt_recordings_row As JSON_DataSet.json_recordingRow
    13. Dim _dt_releasegroups As New JSON_DataSet.json_releasegroupDataTable
    14. Dim _dt_releasegroups_row As JSON_DataSet.json_releasegroupRow
    15. Dim _dt_releases As New JSON_DataSet.json_releaseDataTable
    16. Dim _dt_releases_row As JSON_DataSet.json_releaseRow
    17. Dim _dt_mediums As New JSON_DataSet.json_mediumDataTable
    18. Dim _dt_mediums_row As JSON_DataSet.json_mediumRow
    19. Dim _dt_tracks As New JSON_DataSet.json_trackDataTable
    20. Dim _dt_tracks_row As JSON_DataSet.json_trackRow
    21. Dim _dt_artists As New JSON_DataSet.json_artistDataTable
    22. Dim _dt_artists_row As JSON_DataSet.json_artistRow
    23. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    24. Dim _response As String = _AcoustID_lookup(_fp)
    25. JSON_ROOT = Json.JsonConvert.DeserializeObject(Of c_JSON_ROOT)(_response)
    26. If JSON_ROOT.Status = "ok" Then
    27. Dim _resultCount As Integer = 0
    28. For Each _result As Result In JSON_ROOT.Results
    29. _dt_results_row = _dt_results.Newjson_resultRow
    30. _dt_results_row.cScore = _result.Score.ToString
    31. _dt_results_row.cResultID = _result.Id
    32. _dt_results_row.cResultCount = _dt_results.Rows.Count + 1
    33. _dt_results.Rows.Add(_dt_results_row)
    34. If IsNothing(_result.Recordings) = False Then
    35. Dim _recordingCount As Integer = 0
    36. For Each _recording As Recording In _result.Recordings
    37. _dt_recordings_row = _dt_recordings.Newjson_recordingRow
    38. _dt_recordings_row.cID = _dt_recordings.Rows.Count + 1
    39. _dt_recordings_row.cRecordingSources = _recording.Sources.ToString
    40. _dt_recordings_row.cRecordingID = _recording.Id
    41. _dt_recordings_row.cResult = _resultCount
    42. _dt_recordings_row.cRecording = CInt(_resultCount.ToString & _recordingCount.ToString)
    43. _dt_recordings.Rows.Add(_dt_recordings_row)
    44. If IsNothing(_recording.Releasegroups) = False Then
    45. Dim _releasegroupCount As Integer = 0
    46. For Each _releasegroup As Releasegroup In _recording.Releasegroups
    47. _dt_releasegroups_row = _dt_releasegroups.Newjson_releasegroupRow
    48. _dt_releasegroups_row.cID = _dt_releasegroups.Rows.Count + 1
    49. _dt_releasegroups_row.cReleasegroupID = _releasegroup.Id
    50. _dt_releasegroups_row.cRecording = CInt(_resultCount.ToString & _recordingCount.ToString)
    51. _dt_releasegroups_row.cReleasegroup = CInt(_resultCount.ToString & _recordingCount.ToString & _releasegroupCount.ToString)
    52. _dt_releasegroups.Rows.Add(_dt_releasegroups_row)
    53. If IsNothing(_releasegroup.Releases) = False Then
    54. Dim _releaseCount As Integer = 0
    55. For Each _release As Release In _releasegroup.Releases
    56. _dt_releases_row = _dt_releases.Newjson_releaseRow
    57. _dt_releases_row.cID = _dt_releases.Rows.Count + 1
    58. _dt_releases_row.cReleaseID = _release.Id
    59. _dt_releases_row.cReleasegroup = CInt(_resultCount.ToString & _recordingCount.ToString & _releasegroupCount.ToString)
    60. _dt_releases_row.cRelease = CInt(_resultCount.ToString & _recordingCount.ToString & _releasegroupCount.ToString & _releaseCount.ToString)
    61. _dt_releases.Rows.Add(_dt_releases_row)
    62. If IsNothing(_release.Mediums) = False Then
    63. Dim _mediumCount As Integer = 0
    64. For Each _medium As Medium In _release.Mediums
    65. _dt_mediums_row = _dt_mediums.Newjson_mediumRow
    66. _dt_mediums_row.cID = _dt_mediums.Rows.Count + 1
    67. _dt_mediums_row.cFormat = _medium.Format
    68. _dt_mediums_row.cPosition = _medium.Position.ToString
    69. _dt_mediums_row.cTitle = _medium.Title
    70. _dt_mediums_row.cTrackcount = _medium.TrackCount.ToString
    71. _dt_mediums_row.cRelease = CInt(_resultCount.ToString & _recordingCount.ToString & _releasegroupCount.ToString & _releaseCount.ToString)
    72. _dt_mediums_row.cMedium = CInt(_resultCount.ToString & _recordingCount.ToString & _releasegroupCount.ToString & _releaseCount.ToString & _mediumCount.ToString)
    73. _dt_mediums.Rows.Add(_dt_mediums_row)
    74. If IsNothing(_medium.Tracks) = False Then
    75. Dim _trackCount As Integer = 0
    76. For Each _track As Track In _medium.Tracks
    77. _dt_tracks_row = _dt_tracks.Newjson_trackRow
    78. _dt_tracks_row.cID = _dt_tracks.Rows.Count + 1
    79. _dt_tracks_row.cTrackID = _track.Id
    80. _dt_tracks_row.cPosition = _track.Position.ToString
    81. _dt_tracks_row.cTitle = _track.Title
    82. _dt_tracks_row.cMedium = CInt(_resultCount.ToString & _recordingCount.ToString & _releasegroupCount.ToString & _releaseCount.ToString & _mediumCount.ToString)
    83. _dt_tracks_row.cTrack = CInt(_resultCount.ToString & _recordingCount.ToString & _releasegroupCount.ToString & _releaseCount.ToString & _mediumCount.ToString & _trackCount.ToString)
    84. _dt_tracks.Rows.Add(_dt_tracks_row)
    85. If IsNothing(_track.Artists) = False Then
    86. Dim _artistCount As Integer = 0
    87. For Each _artist As Artist In _track.Artists
    88. _dt_artists_row = _dt_artists.Newjson_artistRow
    89. _dt_artists_row.cID = _dt_artists.Rows.Count + 1
    90. _dt_artists_row.cArtistID = _artist.Id
    91. _dt_artists_row.cName = _artist.Name
    92. _dt_artists_row.cTrack = CInt(_resultCount.ToString & _recordingCount.ToString & _releasegroupCount.ToString & _releaseCount.ToString & _mediumCount.ToString & _trackCount.ToString)
    93. _dt_artists.Rows.Add(_dt_artists_row)
    94. Debug.WriteLine(_resultCount.ToString & "," & _recordingCount.ToString & "," & _releasegroupCount.ToString & "," & _releaseCount.ToString & "," & _mediumCount.ToString & "," & _trackCount.ToString)
    95. 'Debug.WriteLine(_artistCount)
    96. 'Debug.WriteLine(_trackCount)
    97. 'Debug.WriteLine(_mediumCount)
    98. 'Debug.WriteLine(_releaseCount)
    99. 'Debug.WriteLine(_releasegroupCount)
    100. 'Debug.WriteLine(_recordingCount)
    101. 'Debug.WriteLine(_resultCount)
    102. _artistCount += 1
    103. Next
    104. End If
    105. _trackCount += 1
    106. Next
    107. End If
    108. _mediumCount += 1
    109. Next
    110. End If
    111. _releaseCount += 1
    112. Next
    113. End If
    114. _releasegroupCount += 1
    115. Next
    116. End If
    117. _recordingCount += 1
    118. Next
    119. End If
    120. _resultCount += 1
    121. Next
    122. End If
    123. End Sub
    124. Private Function _AcoustID_lookup(ByVal _Fingerprint As String()) As String
    125. Dim responseFromServer As String = Nothing
    126. Try
    127. Dim _lookupString As String = "http://api.acoustid.org/v2/lookup?client=" & "an9wwvgia5" & "&meta=recordings+recordingids+releases+releaseids+releasegroups+releasegroupids+tracks+compress+usermeta+sources+year&duration=" & _Fingerprint(0) & "&fingerprint=" & _Fingerprint(1)
    128. Dim request As WebRequest = WebRequest.Create(_lookupString)
    129. request.Method = "POST"
    130. request.ContentType = "application/xml"
    131. Dim dataStream As Stream = request.GetRequestStream()
    132. dataStream.Close()
    133. Dim response As WebResponse = request.GetResponse()
    134. dataStream = response.GetResponseStream()
    135. Dim reader As New StreamReader(dataStream)
    136. responseFromServer = reader.ReadToEnd()
    137. reader.Close()
    138. dataStream.Close()
    139. response.Close()
    140. Catch ex As Exception
    141. Debug.WriteLine(ex.Message)
    142. Return Nothing
    143. Exit Function
    144. End Try
    145. Return responseFromServer
    146. End Function
    147. End Class


    _MusicBrainz_JSON:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports Newtonsoft.Json
    2. <Serializable>
    3. Public Class Artist
    4. <JsonProperty("id")>
    5. Public Property Id As String
    6. <JsonProperty("name")>
    7. Public Property Name As String
    8. End Class
    9. <Serializable>
    10. Public Class Track
    11. <JsonProperty("position")>
    12. Public Property Position As Integer
    13. <JsonProperty("artists")>
    14. Public Property Artists As Artist()
    15. <JsonProperty("id")>
    16. Public Property Id As String
    17. <JsonProperty("title")>
    18. Public Property Title As String
    19. End Class
    20. <Serializable>
    21. Public Class Medium
    22. <JsonProperty("position")>
    23. Public Property Position As Integer
    24. <JsonProperty("tracks")>
    25. Public Property Tracks As Track()
    26. <JsonProperty("track_count")>
    27. Public Property TrackCount As Integer
    28. <JsonProperty("format")>
    29. Public Property Format As String
    30. <JsonProperty("title")>
    31. Public Property Title As String
    32. End Class
    33. <Serializable>
    34. Public Class Release
    35. <JsonProperty("mediums")>
    36. Public Property Mediums As Medium()
    37. <JsonProperty("id")>
    38. Public Property Id As String
    39. End Class
    40. <Serializable>
    41. Public Class Releasegroup
    42. <JsonProperty("id")>
    43. Public Property Id As String
    44. <JsonProperty("releases")>
    45. Public Property Releases As Release()
    46. End Class
    47. <Serializable>
    48. Public Class Recording
    49. <JsonProperty("sources")>
    50. Public Property Sources As Integer
    51. <JsonProperty("releasegroups")>
    52. Public Property Releasegroups As Releasegroup()
    53. <JsonProperty("id")>
    54. Public Property Id As String
    55. End Class
    56. <Serializable>
    57. Public Class Result
    58. <JsonProperty("recordings")>
    59. Public Property Recordings As Recording()
    60. <JsonProperty("score")>
    61. Public Property Score As Double
    62. <JsonProperty("id")>
    63. Public Property Id As String
    64. End Class
    65. <Serializable>
    66. Public Class c_JSON_ROOT
    67. <JsonProperty("status")>
    68. Public Property Status As String
    69. <JsonProperty("results")>
    70. Public Property Results As Result()
    71. End Class


    P.S.: Newtonsoft.JSON wird importiert!
    Dateien
    • Databindings.zip

      (470,62 kB, 4 mal heruntergeladen, zuletzt: )
    ???
    Du hast keinerlei Datenbindung aktiviert. (siehe meine Bitte in Post#5)
    Du hast keine tDS-Instanz auf Deinem Formular.
    Du hast keine BindingSources, die die ComboBoxen mit dem tDS und somit mit den DataTables und deren Daten verbindet.
    Was erwartest Du da? Da kann nicht viel passieren!

    btw: Du befüllst die DataTables zu Fuß mit For-Schleifen.
    Du arbeitest mit dem VB6-Namespace.
    Vergleiche mit True und False sind redundant.
    letzte beide Punkte in einer Codezeile: If IsNothing(_result.Recordings) = False Then sollte (falls überhaupt gebraucht): If _result.Recordings IsNot Nothing Then

    Ich würd Dir das ganze Projekt gern mit korrekter Datenbindung und DataTable-Befüllung zurückschicken, aber ich muss jetzt los. Schau nochmal bei EdRs VVV-Tutorial vorbei. Zur Datenbefüllung: schau Dir mal z.B. das an: _dt_results.Addjson_resultRow()
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

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

    Das hab ich ausm ganzen Projekt eben rauskopiert! *schäm*

    Also ich bekomm definitiv nur eine Datenausgabe mit z.B.

    DataGridView1.DataSource = _dt_results

    hin..übern Designer funzt nix!

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

    Leider funktioniert der Befüllungscode nicht bei mir, aber wurscht.
    Anbei habe ich in ComboBox1 und 2 mal DataBinding eingebaut, zu sehen über den SmartTag (s. Post#5)
    Für eine Möglichkeit von DataBinding:
    SmartTag einer ComboBox* anklicken, dann
    [X] An Daten gebundene Elemente verwenden
    Datenquelle: weitere Datenquellen -> Projektdatenquellen -> JSON_DataSet -> die gewünschte Tabelle, dessen Elemente/Zeilen in der ComboBox zur Verfügung stehen sollen
    Member anzeigen: jener Spalteninhalt, der in der ComboBox gezeigt werden soll
    Wertemember: was dann tatsächlich als ausgewählter Spalteninhalt anerkannt werden soll, normalerweise eine ID
    Ausgewählter Wert: Kann man z.B. verwenden, um ein anderes CE zur Auswahl der ComboBox-Zeile zu nutzen.

    Möge es helfen.

    Ich blick allerdings weder durch Deine DataTable-Spalten durch (sind da mehrere Eigen-IDs? Die Fremd-IDs versteh ich ja, aber bei json_recording: cID, cRecordingID, cRecording ... check ich nicht) noch durch Deine Namensgebung. Alles mit c beginnend und recht kryptisch. Ok, wenn Du weißt, was welchen Nutzen hat ...

    *keine automatisch erstellte ComboBox aus den Datenquellen ziehen, sonst endest Du bei dem und dem!
    Dateien
    • DB mod.zip

      (293,84 kB, 4 mal heruntergeladen, zuletzt: )
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

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

    Also erstmal vielen Dank für die Mühe..nur leider tut sich im Programm nix an den Comboboxen! :/

    Bei dem json_recording usw. hab ich zusätzliche Spalten eingefügt weil er, nachdem ich Relationen zwischen den Spalten hergestellt hab, gemeckert hat das die Werte nicht unique sind..
    ..alles mist..
    hab jetzt ne Funktion rausgesucht die mir des JSON gleich zum DataTable macht, aber auch kein Erfolg.

    Also des Befüllen bekomm ich ja iwie hin aber die Beziehungen stimmen nicht..die Comboboxen müssen sich den Werten der vorigen Combobox anpassen..aber dafür fehlt die Bindung!
    Dateien
    • Databindings.zip

      (451,02 kB, 4 mal heruntergeladen, zuletzt: )
    Also mit den Bindings hab ichs nich hinbekommen..wohl weil mir zu den jeweiligen Einträgen die jeweilige ID fehlt..wie auch immer..ich habs jetzt so gelöst:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
    2. ComboBox2.Items.Clear()
    3. For i = 0 To JSON_ROOT.results(ComboBox1.SelectedIndex).recordings.Count - 1
    4. ComboBox2.Items.Add(i)
    5. Next
    6. ComboBox2.SelectedIndex = 0
    7. End Sub
    8. Private Sub ComboBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox2.SelectedIndexChanged
    9. ComboBox3.Items.Clear()
    10. For i = 0 To JSON_ROOT.results(ComboBox1.SelectedIndex).recordings(ComboBox2.SelectedIndex).releasegroups.Count - 1
    11. ComboBox3.Items.Add(i)
    12. Next
    13. ComboBox3.SelectedIndex = 0
    14. End Sub
    15. Private Sub ComboBox3_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox3.SelectedIndexChanged
    16. ComboBox4.Items.Clear()
    17. For i = 0 To JSON_ROOT.results(ComboBox1.SelectedIndex).recordings(ComboBox2.SelectedIndex).releasegroups(ComboBox3.SelectedIndex).releases.Count - 1
    18. ComboBox4.Items.Add(i)
    19. Next
    20. ComboBox4.SelectedIndex = 0
    21. End Sub
    22. Private Sub ComboBox4_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox4.SelectedIndexChanged
    23. ComboBox5.Items.Clear()
    24. For i = 0 To JSON_ROOT.results(ComboBox1.SelectedIndex).recordings(ComboBox2.SelectedIndex).releasegroups(ComboBox3.SelectedIndex).releases(ComboBox4.SelectedIndex).mediums.Count - 1
    25. ComboBox5.Items.Add(i)
    26. Next
    27. ComboBox5.SelectedIndex = 0
    28. End Sub
    29. Private Sub ComboBox5_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox5.SelectedIndexChanged
    30. ComboBox6.Items.Clear()
    31. For i = 0 To JSON_ROOT.results(ComboBox1.SelectedIndex).recordings(ComboBox2.SelectedIndex).releasegroups(ComboBox3.SelectedIndex).releases(ComboBox4.SelectedIndex).mediums(ComboBox5.SelectedIndex).tracks.Count - 1
    32. ComboBox6.Items.Add(i)
    33. Next
    34. ComboBox6.SelectedIndex = 0
    35. End Sub
    36. Private Sub ComboBox6_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox6.SelectedIndexChanged
    37. ComboBox7.Items.Clear()
    38. For i = 0 To JSON_ROOT.results(ComboBox1.SelectedIndex).recordings(ComboBox2.SelectedIndex).releasegroups(ComboBox3.SelectedIndex).releases(ComboBox4.SelectedIndex).mediums(ComboBox5.SelectedIndex).tracks(ComboBox6.SelectedIndex).artists.Count - 1
    39. ComboBox7.Items.Add(i)
    40. Next
    41. ComboBox7.SelectedIndex = 0
    42. End Sub
    43. Private Sub ComboBox7_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox7.SelectedIndexChanged
    44. Dim _num1 As Integer = ComboBox1.SelectedIndex
    45. Dim _num2 As Integer = ComboBox2.SelectedIndex
    46. Dim _num3 As Integer = ComboBox3.SelectedIndex
    47. Dim _num4 As Integer = ComboBox4.SelectedIndex
    48. Dim _num5 As Integer = ComboBox5.SelectedIndex
    49. Dim _num6 As Integer = ComboBox6.SelectedIndex
    50. Dim _num7 As Integer = ComboBox7.SelectedIndex
    51. Dim _resultID As String = JSON_ROOT.results(_num1).id
    52. Dim _recordingID As String = JSON_ROOT.results(_num1).recordings(_num2).id
    53. Dim _releasegrpID As String = JSON_ROOT.results(_num1).recordings(_num2).releasegroups(_num3).id
    54. Dim _releaseID As String = JSON_ROOT.results(_num1).recordings(_num2).releasegroups(_num3).releases(_num4).id
    55. Dim _mediumFormat As String = JSON_ROOT.results(_num1).recordings(_num2).releasegroups(_num3).releases(_num4).mediums(_num5).format
    56. Dim _mediumTitle As String = JSON_ROOT.results(_num1).recordings(_num2).releasegroups(_num3).releases(_num4).mediums(_num5).title
    57. Dim _mediumPosition As String = JSON_ROOT.results(_num1).recordings(_num2).releasegroups(_num3).releases(_num4).mediums(_num5).position.ToString
    58. Dim _trackID As String = JSON_ROOT.results(_num1).recordings(_num2).releasegroups(_num3).releases(_num4).mediums(_num5).tracks(_num6).id
    59. Dim _trackPosition As String = JSON_ROOT.results(_num1).recordings(_num2).releasegroups(_num3).releases(_num4).mediums(_num5).tracks(_num6).position.ToString
    60. Dim _trackTitle As String = JSON_ROOT.results(_num1).recordings(_num2).releasegroups(_num3).releases(_num4).mediums(_num5).tracks(_num6).title
    61. Dim _ArtistName As String = JSON_ROOT.results(_num1).recordings(_num2).releasegroups(_num3).releases(_num4).mediums(_num5).tracks(_num6).artists(_num7).name
    62. RichTextBox1.Text = ""
    63. RichTextBox1.AppendText("_resultID: " & _resultID & Environment.NewLine)
    64. RichTextBox1.AppendText("_recordingID: " & _recordingID & Environment.NewLine)
    65. RichTextBox1.AppendText("_releasegrpID: " & _releasegrpID & Environment.NewLine)
    66. RichTextBox1.AppendText("_releaseID: " & _releaseID & Environment.NewLine)
    67. RichTextBox1.AppendText("_mediumFormat: " & _mediumFormat & Environment.NewLine)
    68. RichTextBox1.AppendText("_mediumPosition: " & _mediumPosition & Environment.NewLine)
    69. RichTextBox1.AppendText("_trackID: " & _trackID & Environment.NewLine)
    70. RichTextBox1.AppendText("_trackPosition: " & _trackPosition & Environment.NewLine)
    71. RichTextBox1.AppendText("_trackTitle: " & _trackTitle & Environment.NewLine)
    72. RichTextBox1.AppendText("_ArtistName: " & _ArtistName & Environment.NewLine)
    73. End Sub

    Neu

    Wenn Dir das reicht, dann ok. Aber ich würde es nicht dabei belassen. Mit korrektem DataBinding mussst Du selber keine einzige Codezeile schreiben. Und das sollte für die Wartung die oberste Priorität sein!
    Dann gibt es also ein Poblem im Datenmodell. Einfach zu erkennen, dass wir beide nicht (mehr) wissen, wozu alle Spalten wirklich gebraucht werden.
    Meine Datenmodell besteht pro Tabelle aus:

    Quellcode

    1. ID: Int32, Unique, AutoIncrement*
    2. alle Spalten, die das Objekt an sich beschreiben, welches sich später "in der Tabelle aufhalten soll"
    3. 0 bis x XZY-IDs: Int32, welche auf die IDs (s. Zeile 1) einer anderen Tabelle verweisen, falls Abhängigkeiten bestehen.**


    * Es gibt da zwar ein kleines Risiko, aber das geht @ErfinderDesRades: Hattest Du schon mal den Fall, dass ID sein Maximum überschreitet? Wenn man alte Daten löscht und neue anlegt, werden natürlich die IDs der bestehenden nicht geändert. Würde ja im schlimmsten Fall die Datenbankeinträge inkonsistenz machen. Also wird das bisherige ID-Maximum rausgesucht und da eins draufgesetzt, um die neue ID zu haben. Das führt aber irgendwann zu ID > Int32.MaxValue (bzw. bei Standardeinstellung geht's ja ins Negative, also ID < Int32.MinValue). Ist das bei Dir schon mal vorgekommen oder reichen die Indices bisher? Falls vorgekommen: Was tust Du dann? DB umbauen/aufräumen? Oder was ganz anderes?

    ** z.B. braucht die DataTable Tracks eine Fremd-ID auf die CD; damit kann für den Track festgelegt werden, zu welcher CD er gehört, will heißen auf welcher CD er sich befindet.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Neu

    Dass man sich das manuelle Binding durch korrekte Einstellungen im Designer ersparen kann, ist aber schon klar, oder?
    Im Normalfall reicht das Dateneinlesen, z.B. mit DataSet.ReadXML(). Und. Das. War's.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.