Anfänger Übung mit Datatable und Column Überschrift

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Anfänger Übung mit Datatable und Column Überschrift

    um meine Grundlagen bzgl. Dataset -> Bindingsource -> Datatable usw zu festigen, dachte ich ich mach mal eine kleine Übung. Da ja immer in den Threads die Rede davon ist die Daten nicht aus Controls zu fischen sondern aus Datatable oder Bindingsource wollte ich mal ganz von vorn anfangen.

    Heraus gekommen ist eine Datatable die zur Laufzeit ganz plump befüllt wird.

    Nun habe ich mit ein zwei SChleifen ermitteln wollen was in der Tabelle enthalten ist und das ganze in eine Message Box gepackt.

    Derzeit scheitert mein Vorhaben aber noch an der Tatsache, dass ich die zur Laufzeit erschaffenen Columns nicht in die TextBox bekommen. Irgendwie stehe ich auf dem Schlauch.
    Ich kann nicht zu String konvertieren (Option Strict on).

    Kann mir jmd. einen Tipp geben?

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim dt As New DataTable("MeineDaten")
    3. Public Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. dt.Columns.Add("Kostenart1")
    5. dt.Columns.Add("Kostenart2")
    6. End Sub
    7. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnAddRow.Click
    8. Dim r As DataRow = dt.NewRow
    9. 'Button fügt eine neue Row ein mit immer dem gleichen INhalt
    10. r.Item("Kostenart1") = "Auto"
    11. r.Item("Kostenart2") = "Auto2"
    12. dt.Rows.Add(r)
    13. End Sub
    14. Private Sub BtnListboxFüllen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnListboxFüllen.Click
    15. Dim AnzahlRows As Integer
    16. Dim RowInhalt As String = ""
    17. For i2 As Integer = 0 To dt.Columns.Count - 1
    18. 'hier hätte ich gerne die Spaltenüberschriten ermittelt welche in der vorherigen Sub fix festgelegt wurden
    19. Next
    20. AnzahlRows = dt.Rows.Count
    21. For i As Integer = 0 To dt.Rows.Count - 1
    22. RowInhalt = RowInhalt + " " + CStr(dt.Rows(i)("Kostenart1"))
    23. RowInhalt = RowInhalt + " " + CStr(dt.Rows(i)("Kostenart2")) + vbCrLf
    24. Next
    25. MessageBox.Show("Die Tabelle enthält " & AnzahlRows & " Zeilen " & vbCrLf & RowInhalt)
    26. End Sub
    27. End Class



    Edit:

    Zugegeben: Es macht wenig Sinn am Anfang zu ermitteln wieviele Columns die DT hat und später in der Ausgabe fix nur zwei Columns darzustellen. sauberer wäre es ja mit Sicherheit auch in der Msgbox entsprechend die Anzahl die in der Laufzeit erstellten Columns auszugeben.

    Das kann ich jedoch dann noch nachholen wenn ich kapiert habe wo meine Fehler überhaupt liegt.

    Ich will mit diesem Thread egtl. für mich die Grundlage schaffen zur Laufzeit eine Datatable flexibel zu entwerfen und mit den Daten um zu gehen.

    Gruß Hannes

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „hans im glück“ ()

    deine Vorgehensweise ist untypisiert - sowas hat imo inne Datenbänkerei nix zu suchen.

    Bastel dir ein typisiertes Dataset und setze im FormDesigner die Bindings, um etwas angezeigt zu bekommen.

    Messageboxen haben zur Datenanzeige eiglich auch nix zu schaffen, aber wenn du unbedingt willst, dann schleife eine typisierte DataTable durch - nicht son untypisiertes Dinges.

    gugge vier Views-Videos - am besten alle Videos, zumindest aber:

    Film#1, wo ein typDataset aufgebaut wird
    Film#7, wo gezeigt wird, was der DatasetDesigner alles generiert
    film#8, wo das generierte Zeugs benutzt wird.
    das typ dataset hab ich schon in diversen Anwendungen erstellt, das funktioniert auch gut.
    mein ziel war händisch, ohne den Automatismus von visual Studio, zu verstehen was passiert und auf einzelne werte zu zu greifen.

    mir ist in diesem fall auch absolut bewusst dass der column kein Datentyp zugewiesen ist, mir gings wie gesagt um Prinzip.
    Gruß Hannes
    ah - also absicht. nun muss ich gestehen, dass mir dein Code mit den ganzen Leerzeilen ohne Sinn zu unleserlich ist, als dass ich da tiefer drüber nachhirnen nicht zu faul wäre.

    naja - dein Prob ist in zeile#35 kommentiert?

    na, guck dir die DataColumn-Klasse doch mal im ObjectBrowser an, da findest du bestimmt eine Property, deren Werte sich in einer Listbox gut machen täten.

    ich - databinding-verwöhnt - täte eher sowas versuchen

    VB.NET-Quellcode

    1. listbox1.DataSource=dt.Columns.OfType(Of DataColumn).ToArray
    2. listbox1.DisplayMember="ColumnName"
    (ungetestet)

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