DataSet an Prozedur übergeben und typisiert darauf zugreifen?

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

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von DerSmurf.

    DataSet an Prozedur übergeben und typisiert darauf zugreifen?

    Hallo
    Ich übergebe ein DataSet an eine Prozedur, und möchte dann weiterhin typisiert darauf zugreifen - also mittels row.ColName .
    Das funktioniert, sieht aber komisch aus. Hier ein Beispiel, bitte sagt mir, ob das so korrekt ist:
    DataSet: DtsSettings
    DataTable: Article
    2 Table Rows: Name und Amount

    Wenn ich dies nun in einer Schleife durchlaufe, sieht das so aus:

    VB.NET-Quellcode

    1. For Each row In DtsSettings.Article
    2. messagebox.show(row.Name) ' Ausgabe des Namens
    3. messagebox.show(row.amount.tostring) ' Ausgabe der Menge
    4. Next

    Das ist alles soweit klar.

    Wenn ich aber nun die DataTable an eine andere Sub übergebe, muss meine Schleife etwas anders aussehen, damit das ganze genau so funktioniert. Warum?

    VB.NET-Quellcode

    1. Private Sub MainSub()
    2. SubSub(DtsSettings.Article)
    3. End Sub
    4. Private Sub SubSub(ByVal DTable As DataTable)
    5. For Each row As DtsSettings.ArticleRow In DTable.Rows
    6. messagebox.show(row.Name)
    7. messagebox.show(row.Amount.tostring)
    8. Next


    For Each row As DtsSettings.ArticleRow In DTable.Rows

    Warum ist hier das zusätzliche as DtsSettings.ArticleRow nötig?
    Wenn ich es weglasse, muss ich mittels row("Name") zugreifen - was ja doof ist.
    Das bedeutet doch, das Option Infer (ich hoffe das heißt in einer Schleifendeklaration auch so), in diesem Fall eine "normale" DataRow erzeugt.
    Aber ich übergebe doch DtsSettings.Article!?

    Edit: Den Code habe ich hier im Forum geschrieben. Tippfehler bitte ignorieren.

    DerSmurf schrieb:

    As DataTable
    ist böse!!
    Nochmal codeproject.com/Articles/10351…ped-Dataset-for-Beginners nachlesen.

    Es heisst: As ArticleTable



    Und bitte sprechend benamen

    VB.NET-Quellcode

    1. Private Sub MainSub()
    2. SubSub(DtsSettings.Article)
    3. End Sub
    4. Private Sub SubSub(articles As ArticleTable)
    5. For Each article In articles
    6. messagebox.show(article.Name)
    7. messagebox.show(article.Amount.tostring)
    8. Next