Announcement

Collapse
No announcement yet.

Datatable in Arraylist konvertieren - und dann?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datatable in Arraylist konvertieren - und dann?

    Hallo zusammen von einem neuen Mitglied,

    ich habe bereits das Forum durchsucht und nichts treffendes zu folgendem gefunden:

    Ich habe einen DataTable, den ich in eine Arraylist umwandeln möchte.
    Dies mache ich folgend: (objDT ist der Datatable. Der ist soweit in Ordnung und auch befüllt, da ich später diesen bis jetzt noch an einen DataGridView binde)

    Dim arrlist As New ArrayList()
    For Each DataRow In objDT.Rows
    arrlist.Add(DataRow)
    Next

    Soweit so gut. (oder nicht?)

    Nur wie greife ich jetzt auf die jeweiligen Werte in der Arraylist zu? Wenn ich z.B. Testweise
    MsgBox(arrlist(5).ToString) laufen lasse, kommt nur "System.Data.DataRow"
    zurück.

    Vielleicht ist es eine relativ simple Antwort, nur ich sitze jetzt schon seit 1-2 Stunden daran und finde einfach die Lösung nicht :/
    Danke schonmal...

  • #2
    Du hast die ganze Row der Arraylist zugewiesen, nicht die Inhalte einzelner Felder. Es gibt zwei vorgehensweisen:

    1) Du überschreibst in Deiner eigenen (von Datarow geerbten) Klasse die eigenschaft toString . Damit kannst Du festlegen, was angezeigt werden soll.

    2) Du schreibst einen zusammengestzten String direkt in die Arraylist:
    [highlight=vbnet] For Each dr as DataRow In objDT.Rows
    arrlist.Add(dr.Item(0).ToString + dr.item(1).ToString() )
    Next
    [/highlight]

    Grüße

    Roland
    Zuletzt editiert von RolandF; 10.12.2010, 12:44.

    Comment


    • #3
      Die dritte Alternative ist:

      Bei dem Zugriff auf die einzelenen Felder zugreifen, dabei mußt Du aber den Type Objekt zunächst zu Datarow Casten (mit Ctype )

      Code:
       
      MsgBox(CType(arrlist(0), DataRow).Item(0).ToString)
      oder hier noch einmal länger zum besseren Verständnis

      [highlight=vbnet]Dim drOut as Datarow

      drOut = Ctype(arrlist(0), DataRow)

      Msgbox ( drOut.Item(0).ToString())
      [/highlight]


      Viel Erfolg

      Roland

      Comment


      • #4
        Danke erstmal!

        Das mit dem zusammengesetzten String funktioniert...würde ich aber gerne vermeiden. (aus den einzelnen Zellen soll später noch was berechnet werden)

        Kann ich die Arraylist nicht mehrdimensional machen und dann quasi wie auf ein Array per Index zugreifen?

        Dazu müsste die Arraylist auch erstmal 2dimensional befüllt werden, oder?

        Edit//
        Sehe gerade du hast noch eine Antwort geschrieben...sorry wenn ichs nicht raffe, aber dort sehe ich auch keinen 2dimensionalen Zugriff irgendwie?

        Comment


        • #5
          Noch besser sind generische Listen

          die vierte Alternative ist noch etwas besser.

          Hier verwende ich eine generische Liste List(of ... ):

          [highlight=vbnet]
          Dim al As New List(Of DataRow)

          For Each dr As DataRow In objDT.Rows
          al.Add(dr)
          Next

          Debug.Print(al(0).Item(0).ToString)

          Debug.Print(al(0).Item(1).ToString)

          [/highlight]
          Das solte jetzt Deinen Bedürfnissen am ehesten entgegenkommen.

          Die von Dir angesprochene zweite Dimension steckt in der Datarow

          In jedem Element der Liste al(n) steckt wiederum eine Liste mit Spalten der Row.

          Ok?





          Grüße

          Roland
          Zuletzt editiert von RolandF; 10.12.2010, 13:14.

          Comment


          • #6
            Originally posted by RolandF View Post
            die vierte Alternative ist noch etwas besser.

            Hier verwende ich eine generische Liste List(of ... ):

            Code:
                    Dim al As New List(Of DataRow)
            
                    For Each dr As DataRow In objDT.Rows
                        al.Add(dr)
                    Next
            
                    Debug.Print(al(0).Item(0).ToString)
            
                    Debug.Print(al(0).Item(1).ToString)
            Das solte jetzt Deinen Bedürfnissen am ehesten entgegenkommen.

            Grüße

            Roland
            Hi Roland,

            super, tausend dank, diese Variante ist genau die die ich gesucht habe...werde jetzt mal genau studieren was da passiert

            Danke!

            Comment

            Working...
            X