Dictionary Key suche und String() werte einzeln ausgeben

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von woltz.

    Dictionary Key suche und String() werte einzeln ausgeben

    Moin,

    zu meinem Problem: ich ziehe einen eindeutigen Wert aus der Datenbank und damit soll die Dictionary(String, String()) durchsucht werden und mir die 6 Werte nach einander ausgeben.
    Die wiederrum für Excel-Zellen stehen und automatisch befüllt werden.

    VB.NET-Quellcode

    1. Private Shared dict As New Dictionary(Of String, String()) From {
    2. {"1C201", New String() {"B46", "D47", "E47", "F47", "E46", "F46"}},
    3. {"1C202", New String() {"B42", "D43", "E43", "F43", "E42", "F42"}}}
    4. If reader.HasRows Then
    5. Do While reader.Read()
    6. HRstring = reader.GetString(2)
    7. If dict.ContainsKey(HRstring) = True And x2 = 0 Then
    8. 'Der Name wird gefunden aber wie greife ich auf den Index zu wenn ich "B46" als String haben will damit ich alles automatisieren kann??
    9. shXL.Range("B46").Value = reader.GetString(0)
    10. shXL.Range("D47").Value = reader.GetString(1)
    11. If Not reader.IsDBNull(3) Then
    12. A_liste(i).betrieb = reader.GetString(3)
    13. shXL.Range("E47").Value = A_liste(i).betrieb
    14. End If
    15. If Not reader.IsDBNull(4) Then
    16. A_liste(i).dis = "dis"
    17. shXL.Range("F47").Value = A_liste(i).dis
    18. End If
    19. If Not reader.IsDBNull(5) Then
    20. A_liste(i).allg = "S"
    21. shXL.Range("E46").Value = A_liste(i).allg
    22. End If
    23. If Not reader.IsDBNull(6) Then
    24. A_liste(i).b = "B"
    25. shXL.Range("F46").Value = A_liste(i).b
    26. End If
    27. End If



    Danke im Vorraus schonmal ....

    VB.NET-Quellcode

    1. 'Der Name wird gefunden aber wie greife ich auf den Index zu wenn ich "B46" als String haben will damit ich alles automatisieren kann??
    2. 'ähm - auf den Index greift man normalerweise nicht zu, sondern umgekehrt: **Mit** einem Index greift man auf Werte zu.
    3. Dim Werte = dic(HRstring)
    4. dim index = 0
    5. dim xlsAddress = Werte(index) ' B42
    6. index = 1
    7. xlsAddress = Werte(index) ' D43
    8. index = 2
    9. xlsAddress = Werte(index) ' E43
    10. '...
    @woltz So was:

    VB.NET-Quellcode

    1. Private Shared dict As New Dictionary(Of String, String()) From {
    2. {"1C201", New String() {"B46", "D47", "E47", "F47", "E46", "F46"}},
    3. {"1C202", New String() {"B42", "D43", "E43", "F43", "E42", "F42"}}}
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. MessageBox.Show(dict("1C201")(1))
    6. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    woltz schrieb:

    Der HRstring ist der DB-Wert der gefiltert wird über den Dict -Key (klappt) und daraus sollen die 6 Strings einzeln angesprochen werden ("B42", "B46" usw...) und an die jeweilige stelle eingesetz werden. Wie parameter!
    ich versteh kein Wort.
    Wie filtert man einen String??

    Und "daraus" (was immer damit gemeint sein mag) sollen 6 Strings einzeln angesprochen werden??

    "an die jeweilige Stelle" (was immer damit gemeint sein mag)

    Wie parameter! (hä?)
    Moin,
    Nach "1C201" wird gesucht und und die 6 Strings "B46"... sollten nacheinander ausgegeben werden um für den Datareader die Daten: Vorname, Nachname usw. in bestimmte Zellen zuschreiben.

    @RodFromGermany
    Genau so wollte ich das haben und es hat Wunderbar funktioniert, danke.


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

    jo, jetzt habich glaub verstanden was wolle.
    probier ma so:

    VB.NET-Quellcode

    1. Private Shared dict As New Dictionary(Of String, String()) From {
    2. {"1C201", New String() {"B46", "D47", "E47", "F47", "E46", "F46"}},
    3. {"1C202", New String() {"B42", "D43", "E43", "F43", "E42", "F42"}}}
    4. Private Sub WriteToExcel(reader As Common.DbDataReader)
    5. While reader.Read()
    6. Dim HRstring = reader.GetString(2)
    7. Dim xAddresses As String() = Nothing
    8. If Not dict.TryGetValue(HRstring, xAddresses) Then Continue While
    9. If x2 <> 0 Then Continue While
    10. shXL.Range(xAddresses(0)).Value = reader.GetString(0)
    11. shXL.Range(xAddresses(1)).Value = reader.GetString(1)
    12. If Not reader.IsDBNull(3) Then
    13. A_liste(i).betrieb = reader.GetString(3)
    14. shXL.Range(xAddresses(2)).Value = A_liste(i).betrieb
    15. End If
    16. If Not reader.IsDBNull(4) Then
    17. A_liste(i).dis = "dis"
    18. shXL.Range(xAddresses(3)).Value = A_liste(i).dis
    19. End If
    20. If Not reader.IsDBNull(5) Then
    21. A_liste(i).allg = "S"
    22. shXL.Range(xAddresses(4)).Value = A_liste(i).allg
    23. End If
    24. If Not reader.IsDBNull(6) Then
    25. A_liste(i).b = "B"
    26. shXL.Range(xAddresses(5)).Value = A_liste(i).b
    27. End If
    28. End While
    29. End Sub
    Kann noch fehler enthalten - ich kanns ja nicht testen, weil hab ja nicht deinen DataReader.