in einem Dataset die ID einer Zeile anhand des Namens finden

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von TS71M.

    in einem Dataset die ID einer Zeile anhand des Namens finden

    Hallo Leute,

    folgendes Problem:
    Ich lade aus einem Dataset Firmennamen in eine ListCheckedBox. Soweit ganz einfach...

    VB.NET-Quellcode

    1. Dim ColSup As Integer = SupplierBindingSource.Count - 1
    2. clbSupplier.Items.Clear()
    3. For i As Integer = 0 To ColSup
    4. With DirectCast(DirectCast(SupplierBindingSource.Item(i), DataRowView).Row, AMSDataSet.SupplierRow)
    5. clbSupplier.Items.Add(AMSDataSet.Supplier.FindBySupplierID(.SupplierID).Company)
    6. End With
    7. Next

    Somit werden alle Firmennamen als String eingetragen.
    Jetzt soll aber bei Auswahl einer Firma eine neue Zeile in einer Tabelle erstellt werden. Dazu brauche ich aber die ID der Firma.
    Wie kann ich anhand des Firmennamens die dazugehörige ID im Dataset finden/auslesen?
    Umgekehrt ist es ja total einfach mit Dataset.datatable.FindBySupplierID.
    Naja, umständlich finde ich das nicht, so könnte in etwa eine Funktion aussehen, die dir die ID zurückgibt.

    VB.NET-Quellcode

    1. Private Function GetIdByFactoryName(fn As String, dt As DataTable) As String
    2. Using dv As New DataView(dt)
    3. Using bs As New BindingSource
    4. bs.DataSource = dv
    5. bs.Filter = String.Format("Firma = '{0}'", fn)
    6. If bs.Count = 1 Then
    7. Dim drv As DataRowView = DirectCast(bs.Current, DataRowView)
    8. Return Convert.ToString(drv("ID"))
    9. Else
    10. Return Nothing
    11. End If
    12. End Using
    13. End Using
    14. End Function


    Bin mir aber nicht sicher ob das so optimal ist, @ErfinderDesRades weiss da bestimmt mehr.

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

    @VB1963 das klingt so, als ob du nicht alles gelesen hast.

    @xtts02 und wie wäre dann die "richtige" Vorgehensweise?

    @WhitePage Nein. Es ist keine 1:n Beziehung. Deswegen möchte ich es ja so machen.

    Also nochmal; es geht um Preisanfragen:
    In einer Tabelle wählt man die Produckte aus und gibt die gewünschten Mengen ein (Bild PriceInquiry).
    Dann klickt man auf "Send" und ein neuer Dialog öffnet sich wo man auswählt für welche Lieferanten das erstellt werden soll (Bild Request).
    Somit soll, wenn der user links einen Lieferanten anklickt rechts eine Zeile mit den entsprechenden Werten erstellt werden.
    Und ja es soll für jeden Lieferanten eine Zeile erstellt werden, da ich später noch einen Preisvergleich machen will und dazu dann gleich diese Tabelle verwenden kann.
    In der CheckedListBox stehen jetzt allerdings nur noch die Firmennamen als String und um den Supplier / die SupplierID richtig in der rechten Spalte einzutragen muss ich mit Hilfe des String die entsprechende SupplierID finden, oder nicht?
    Bilder
    • PriceInquiry.jpg

      193,88 kB, 1.281×987, 108 mal angesehen
    • Request.jpg

      88,16 kB, 1.277×981, 108 mal angesehen

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

    TS71M schrieb:

    Wie kann ich anhand des Firmennamens die dazugehörige ID im Dataset finden/auslesen?


    Ganz unschön:

    VB.NET-Quellcode

    1. Id = DirectCast(DirectCast(bs.Current, DataRowView).Row.Item(0), Integer)

    Nicht hübsch, sollte aber genau das machen, was du brauchst, vorausgesetzt die ID steht an erster Stelle ...
    Schade, dass es mit dem Verstehen nicht so dolle ist ... Sonst wärst du auf WhitePage eingegangen ...
    Your computer is running... You better go chase it! :P :D
    Schade, dass es mit dem Verstehen nicht so dolle ist ... Sonst wärst du auf WhitePage eingegangen ...

    Es ist alles ausführlich erklärt und sogar mit Bildern. Nur man muss es halt auch "alles" lesen und nicht nur auf einen Satz antworten.
    Somit bin es nicht ich, der nicht auf jemanden eingeht!

    Und das gleiche gilt für dich:
    Das Problem ist nur welche bs?
    Der Firmenname kommt als string aus einer CheckedListBox

    Ich habe es jetzt mit der function von Murdock gelöst und das läuft.

    Danke

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

    Also ich habe bei mir diese Funktionen mit einer kurzen Linq abfrage geregelt.

    VB.NET-Quellcode

    1. Public Async Function getIDAsync(ByVal DeinSupplier As String) As Task(Of Integer)
    2. Dim Supplier As String = DeinSupplier
    3. Dim dsSupplier = tabelleSupplier.AsEnumerable.AsParallel
    4. Dim supplierID = (From s In dsSupplier
    5. Where s.Name = Supplier
    6. Select s.ID).FirstOrDefault
    7. Return supplierID
    8. End Function


    Allerdings funktioniert die Sache so nur wenn du nicht mehrere gleiche Namen hast.