DataTable Inhalt und Anbindung an BindingSource

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

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

    DataTable Inhalt und Anbindung an BindingSource

    Hallo,

    wie spreche ich eine einzelne Zelle in einer DataTable an?

    Wenn ich eine BindingSource filtere, dann zieht sich das ja auch in DataGridview durch. Wird daher auch eine Änderung in der DataTable in der BindingSoure übernommen?

    VB.NET-Quellcode

    1. BindingSource1.DataSource = DataTable1
    2. Datagridview1.DataSource = BindingSource


    Ich würde gerne ausgehend von einer Basis Datenquelle, die Daten abzapfen und dann damit etwas freier hantieren, also neue Spalte/Zeilen hinzufügen können filtern und sortieren. Die Anbindung der Datenquelle ist kein Problem, aber um das Ganze danach zu gestalten fehlt mir noch das Verständnis.

    Viele Grüße

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Haudruferzappeltnoch schrieb:

    wie spreche ich eine einzelne Zelle in einer DataTable an?
    Hallo, Zeile! Wie geht es Dir? DataTable1.Rows(0) 'für die 1. Zeile der Table
    Die BijndingSource (BS) enthält erstmal alle DataTable-Zeilen. Das ändert sich durch den Filter nicht. Nur die Anzeige im DGV ändert sich. Ändere die DataTable wie Du willst. Wenn es nicht sofort im DGV übernommen wird, kannst Du mit BS.ResetBindings(False) nachhelfen.
    Sind Deine DataTables typisiert? Arbeitest Du mit einem tDS?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Danke Vaporized
    Ich weiß nicht was typisiert genau bedeutet. Aber nachdem was ich gelesen habe sind meine DataTables nicht typisiert, da ich auf DBNull prüfe/ prüfen muss.

    Kann man die selbst typisieren? Muss das in der Quelle schon passieren? Ich denke in der Quelle gibt es schon spezifische Datentypen.
    Die DBNull Prüfung hat mit typisiert (eigentlich "stark typisiert" / "strongly typed") nichts zu tun.
    Man kann solche Datasets in der VisualStudio Umgebung (IDE) für WinForms schön per Designer erstellen. Da kannst du auch direkt sagen, ob DBNull erlaubt ist und einen Startwert eintragen. (Leer wäre String.Empty).
    Da haben deine Tabellen dann "Felder" denen du zuweist, was für einen Typ sie haben, zum String, oder Int32, oder Boolean, etc. Das ist damit gemeint.

    Man kann aber auch, was für Net.CORE oder WPF durchaus sinnvoller wäre, einfache POCO-Klassen schreiben, die kann man nämlich auch binden. Nicht direkt, sondern über eine Liste von der Klasse.
    Einmal geübt ist das supereinfach und universell einsetzbar.
    Davon hast du nichts geschrieben ;)
    @ErfinderDesRades hat aber einen Adapter geschrieben um Datenbanken an Dataset anzubanzeln. Musst da mal schauen.
    Du kannst aber auch SQL-Queries nach POCO schreiben. Sowas ist halt arbeit, Tabelle für Tabelle zu schreiben.
    Dapper soll ein gutes und leicht verständliches Werkzeug sein, um Datenbanken in sein Datenmodel zu bekommen. Aber damit habe ich nie gearbeitet.

    Für das was ich mache brauche ich keine DB, ich habe nur "Durchlauferhitzer" für uralte System um sie in dann in eine XML-Struktur zu quälen, die dann wieder wo anders in die DBs importiert werden.
    Bei den Datenmengen (geht in die Million Datensätze pro Auftrag), die ich schubse, sind DataSets aber grenzwertig, mit POCO-Objekten komme ich schneller voran, und die sind auch strongly typed.

    dapper-tutorial.net/dapper
    github.com/DapperLib/Dapper
    Also im Moment haperts nur am Hinzufügen neuer Werte.
    Ich bekomme bei Table.Rows(0).Item(4) = 1 eine Fehlermeldung das Feld Value des Typs DBNull ist ReadOnly. Das ist allerdings bei jeder Zelle so auch die die eigentlich nicht leer sind.

    POCO erinnert micht an eine Struktur, bei Wikipedia ist das ziemlich einfach gehalten, da erkenne ich nciht unbedingt den zusammenhang zu Datenbankanbindungen.
    Kann es sein, du meinst quasi die Datenquelle in ein großes Array zu speichern?

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

    So hat etwas gedauert, sorry. Ich schreibe nicht VB.Net sondern C# und da ist die Gewöhnung weg, aber mit den Internet-Übersetzern gehts, hab dir da was gebastelt.
    Damit ist noch nicht geklärt wie die Daten eingelesen werden, aber der Aufbau einer kleinen POCO Klasse sollte damit klar werden.
    Einfach ein VB.NET KonsolenProgramm machen und das hier reinkopieren.

    VB.NET-Quellcode

    1. Module Module1
    2. Public Personen As List(Of Person) = New List(Of Person)
    3. Sub Main()
    4. Personen = New List(Of Person)
    5. Personen.Add(New Person With {
    6. .ID = 1,
    7. .Salutation = SalutationType.Herr,
    8. .Birthday = New DateTime(1989, 7, 4),
    9. .Firstname = "Walter",
    10. .Supplementname = "",
    11. .Name = "Hinrichs",
    12. .Street = "Am Bahnhof 2",
    13. .City = "Kassel",
    14. .ISOCountryCode = "DE",
    15. .Postalcode = "47111"})
    16. Personen.Add(New Person With {
    17. .ID = 2,
    18. .Salutation = SalutationType.Frau,
    19. .Birthday = New DateTime(2001, 1, 19),
    20. .Firstname = "Andra",
    21. .Supplementname = "",
    22. .Name = "Thomsen",
    23. .Street = "Auf dem Land 2",
    24. .City = "Dörpen",
    25. .ISOCountryCode = "DE",
    26. .Postalcode = "47122"})
    27. For Each person In Personen
    28. Console.WriteLine(person.ToString)
    29. Next
    30. Console.ReadKey()
    31. End Sub
    32. End Module
    33. Public Enum SalutationType
    34. Herr = 1
    35. Frau = 2
    36. Firma = 3
    37. Diverse = 9
    38. End Enum
    39. Public Class Person
    40. Public Property ID As Integer
    41. Public Property Salutation As SalutationType
    42. Public Property Name As String = String.Empty
    43. Public Property Firstname As String = String.Empty
    44. Public Property Supplementname As String = String.Empty
    45. Public Property Birthday As DateTime
    46. Public Property ISOCountryCode As String = "DE"
    47. Public Property Street As String = String.Empty
    48. Public Property City As String = String.Empty
    49. Public Property Postalcode As String = String.Empty
    50. Public Overrides Function ToString() As String
    51. Return $"{Firstname} {Name} , {City}"
    52. End Function
    53. End Class

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

    Haudruferzappeltnoch schrieb:

    Ich weiß nicht was typisiert genau bedeutet.
    Das ist eine ganze Welt.
    Gugge vier Views-Videos
    Untypisierte DataTables hingegen sind die Hölle.

    Ich denke auch, du bist noch nicht so weit, dass du eine Anwendung mit Datenbank-Anbindung entwickeln solltest.
    Du solltest dir erst die Techniken des Tuts aneignen, also lernen, was Datenmodellierung ist, und worauf achten.
    Und was DataBinding ist.
    Fängt man die Datenbänkerei falsch an, verbaut man sich die Möglichkeit von Databinding, und Anwendungen, die auf derlei Unwissen aufbauen werden sehr schnell sehr umfangreich, und sind doch nur für die Tonne.

    Aber ich hab dir doch auch mal meinen "Lehrplan" verlinkt.
    Das ist wirklich ernst gemeint, was da steht.
    Es ist nicht sinnvoll, den zweiten Schritt vor dem ersten zu versuchen.