Tabelle + BindingSource

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von gamer-bn.

    Tabelle + BindingSource

    Hallo,

    ich habe DataGridView und eine BindingSource. Das DataGridView habe ich mit der Binding Source verknüpft.

    In der DataGridView habe ich verscheidene Spalten: Spalte 1, Spalte 2, Spalte 3.

    Jetzt habe ich noch einen Button. Wenn ich auf den drauf drücke (ich habe es jetzt erst einmal etwas vereinfacht, dass ihr es besser versteht) möchte ich, dass in der Tabelle eine neue Zeile angelegt wird. Bei der Zeile soll in Spalte 1 "Test1", in Spalte 2 "Test2" und in Spalte 3 "Test3" stehen.

    Habt ihr eine Idee, wie man das am besten lösen könnte?

    VB.NET-Quellcode

    1. BindingSource1.AddNew()
    Soweit bin ich schon. Aber wie kann ich jetzt schon bei der Erstellung dieser Zeile festlegen, was in den einzelnen Spalten stehen soll?

    Ich bedanke mich jetzt schon mal für alle Antworten!!


    gamer-bn

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „gamer-bn“ ()

    Nimm ein leeres DataGridView und weise der BindingSource eine DataTable als DataSource zu.
    Diese DataTable baue so auf, wie die Tabelle aussehen soll. sditiert wird im DataGridView, gespeichert und geladen wird die DataTable.

    VB.NET-Quellcode

    1. Private Sub CreateTable(MyTableName As String)
    2. Dim _Bezeichnung As New System.Data.DataColumn("Bezeichnung")
    3. _Bezeichnung.DataType = GetType([String])
    4. '_Bezeichnung.AutoIncrement = true; // nur bei typeof(int);
    5. Dim _Inhalt As New System.Data.DataColumn("Inhalt")
    6. _Inhalt.DataType = GetType([String])
    7. Dim _Sort As New System.Data.DataColumn("Sortierung")
    8. _Sort.DataType = GetType(Integer)
    9. Me._DataTable = New System.Data.DataTable(MyTableName)
    10. Me._DataTable.Columns.Add(_Bezeichnung)
    11. Me._DataTable.Columns.Add(_Inhalt)
    12. Me._DataTable.Columns.Add(_Sort)
    13. Me._DataTable.Constraints.Add("Key1", _Bezeichnung, True)
    14. ' "Key1" ist der Name der Einschränkung; IDColumn ist Primärschlüssel
    15. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    VB.NET-Quellcode

    1. Dim _DataTable As New System.Data.DataTable
    2. ' ...
    3. _DataTable.WriteXml(DEINE_DATEI)
    4. _DataTable.ReadXml(DEINE_DATEI)
    Um Formatierung und Co musst Du Dich nicht kümmern.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Und was macht das DataTable jetzt? Ist das jetzt eine Datei, die auf dem PC ausgelagert und eingelesen wird? Und wie verknüpfe ich die DataTable mit der BindingSource?


    Hier bis jetzt mal mein (dein) Code:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim _DataTable As New System.Data.DataTable
    3. ' ...
    4. _DataTable.WriteXml("C:/Users/gamer_bn/Desktop/Test.xml")
    5. _DataTable.ReadXml("C:/Users/gamer_bn/Desktop/Test.xml")
    6. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    7. End Sub
    8. Private Sub CreateTable(MyTableName As String)
    9. Dim _Bezeichnung As New System.Data.DataColumn("Bezeichnung")
    10. _Bezeichnung.DataType = GetType([String])
    11. '_Bezeichnung.AutoIncrement = true; // nur bei typeof(int);
    12. Dim _Inhalt As New System.Data.DataColumn("Inhalt")
    13. _Inhalt.DataType = GetType([String])
    14. Dim _Sort As New System.Data.DataColumn("Sortierung")
    15. _Sort.DataType = GetType(Integer)
    16. Me._DataTable = New System.Data.DataTable(MyTableName)
    17. Me._DataTable.Columns.Add(_Bezeichnung)
    18. Me._DataTable.Columns.Add(_Inhalt)
    19. Me._DataTable.Columns.Add(_Sort)
    20. Me._DataTable.Constraints.Add("Key1", _Bezeichnung, True)
    21. ' "Key1" ist der Name der Einschränkung; IDColumn ist Primärschlüssel
    22. End Sub
    23. End Class



    _DataTable.WriteXml("C:/Users/gamer_bn/Desktop/Test.xml")
    _DataTable.ReadXml("C:/Users/gamer_bn/Desktop/Test.xml")


    Doch das etwas markierte wird immer noch blau unterringelt.

    Fehler: Deklaration erwartet


    Und sind Inhalt, Bezeichnung und Sortierung jetzt die Spaltennamen und by GetType kann man jetzt zum Beispiel den Text von Textbox1 nehmen, oder verstehe ich das jetzt völlig falsch?


    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim _DataTable As New System.Data.DataTable
    3. ' ...
    4. _DataTable.WriteXml("C:/Users/gamer_bn/Desktop/Test.xml")
    5. _DataTable.ReadXml("C:/Users/gamer_bn/Desktop/Test.xml")
    6. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    7. End Sub
    8. Private Sub CreateTable(Tabelle1 As String)
    9. Dim _Spalte1 As New System.Data.DataColumn("Spaltenname1")
    10. _Spalte1.DataType = GetType(Textbox1.text)
    11. Dim _Spalte2 As New System.Data.DataColumn("Spaltenname2")
    12. _Spalte2.DataType = GetType(Textbox2.text)
    13. Dim _Spalte3 As New System.Data.DataColumn("Spaltenname3")
    14. _Spalte3.DataType = GetType(textbox3.text)
    15. Me._DataTable = New System.Data.DataTable(Tabelle1)
    16. Me._DataTable.Columns.Add(_Spalte1)
    17. Me._DataTable.Columns.Add(_Spalte2)
    18. Me._DataTable.Columns.Add(_Spalte3)
    19. Me._DataTable.Constraints.Add("Eintrag1 in Spalte1", _Spalte1, True)
    20. ' "Key1" ist der Name der Einschränkung; IDColumn ist Primärschlüssel
    21. Me._DataTable.Constraints.Add("Eintrag2 in Spalte2", _Spalte2, True)
    22. Me._DataTable.Constraints.Add("Eintrag3 in Spalte3", _Spalte3, True)
    23. End Sub
    24. End Class


    Da unterringelt er mir aber noch jeweils textbox1,2,3.text

    Fehler: Der Typ "textbox1.text" (+2+3) ist nicht definiert + der Fehler wie oben in pink.


    Was müsste ich da jetzt noch verändern? Und was muss ich dann in den Button-Quelltext schreiben, wenn ich wenn ich auf den Button drücke in Spalte1 der Text von Textbox1 erscheint, In Spalte2 der Text von Textbox2 und in Spalte3 der Text von Textbox3? Was muss ich dann noch zu BindingSource1.AddNew() hinzufügen?

    Muss das dann in den Button1 Text?

    VB.NET-Quellcode

    1. Me._DataTable.Constraints.Add("Eintrag1 in Spalte1", _Spalte1, True)
    2. ' "Key1" ist der Name der Einschränkung; IDColumn ist Primärschlüssel
    3. Me._DataTable.Constraints.Add("Eintrag2 in Spalte2", _Spalte2, True)
    4. Me._DataTable.Constraints.Add("Eintrag3 in Spalte3", _Spalte3, True)



    Kannst du mir bitte nocheinmal helfen?


    gamer-bn
    Sieh Dir mal das an:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private _DataTable As System.Data.DataTable
    3. Private _TableName As String
    4. Private _binding As BindingSource
    5. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    6. _TableName = "C:/Users/gamer_bn/Desktop/Test.xml"
    7. _DataTable = New System.Data.DataTable
    8. _binding = New BindingSource()
    9. CreateTable("MyTable")
    10. _binding.DataSource = _DataTable
    11. DataGridView1.DataSource = _binding
    12. If System.IO.File.Exists(_TableName) Then
    13. _DataTable.ReadXml(_TableName)
    14. End If
    15. End Sub
    16. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    17. _DataTable.WriteXml(_TableName)
    18. End Sub
    19. Private Sub CreateTable(Tabelle1 As String)
    20. Dim _Spalte1 As New System.Data.DataColumn("Spaltenname1")
    21. _Spalte1.DataType = GetType([String])
    22. Dim _Spalte2 As New System.Data.DataColumn("Spaltenname2")
    23. _Spalte2.DataType = GetType([String])
    24. Dim _Spalte3 As New System.Data.DataColumn("Spaltenname3")
    25. _Spalte3.DataType = GetType(Integer)
    26. Me._DataTable = New System.Data.DataTable(Tabelle1)
    27. Me._DataTable.Columns.Add(_Spalte1)
    28. Me._DataTable.Columns.Add(_Spalte2)
    29. Me._DataTable.Columns.Add(_Spalte3)
    30. Me._DataTable.Constraints.Add("Eintrag1 in Spalte1", _Spalte1, True)
    31. ' "Key1" ist der Name der Einschränkung; IDColumn ist Primärschlüssel
    32. Me._DataTable.Constraints.Add("Eintrag2 in Spalte2", _Spalte2, True)
    33. Me._DataTable.Constraints.Add("Eintrag3 in Spalte3", _Spalte3, True)
    34. End Sub
    35. End Class
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private _DataTable As System.Data.DataTable
    3. Private _TableName As String
    4. Private _binding As BindingSource
    5. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    6. _TableName = "C:/Users/Maximilian/Desktop/Test.xml"
    7. _DataTable = New System.Data.DataTable
    8. _binding = New BindingSource()
    9. CreateTable("MyTable")
    10. _binding.DataSource = _DataTable
    11. DataGridView1.DataSource = _binding
    12. If System.IO.File.Exists(_TableName) Then
    13. _DataTable.ReadXml(_TableName)
    14. End If
    15. End Sub
    16. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    17. _DataTable.WriteXml(_TableName)
    18. End Sub
    19. Private Sub CreateTable(Tabelle1 As String)
    20. Dim _Datum As New System.Data.DataColumn("Datum")
    21. _Datum.DataType = GetType([String])
    22. Dim _KM As New System.Data.DataColumn("KM")
    23. _KM.DataType = GetType([String])
    24. Dim _Fahrzeit As New System.Data.DataColumn("Fahrzeit")
    25. _Fahrzeit.DataType = GetType(Integer)
    26. Me._DataTable = New System.Data.DataTable(Tabelle1)
    27. Me._DataTable.Columns.Add(_Datum)
    28. Me._DataTable.Columns.Add(_KM)
    29. Me._DataTable.Columns.Add(_Fahrzeit)
    30. Me._DataTable.Constraints.Add("Datumseintrag", _Datum, True)
    31. ' "Key1" ist der Name der Einschränkung; IDColumn ist Primärschlüssel
    32. Me._DataTable.Constraints.Add("KM Eintrag", _KM, True)
    33. Me._DataTable.Constraints.Add("Fahrzeiteintrag", _Fahrzeit, True)
    34. End Sub
    35. End Class


    Also danke schonmal soweit. Ich habe nun ein leeres DataGridVIew und wenn ich starte werden die Spalten schonmal richtig benannt. Aber wenn ich auf Button1 clicke, dann erscheint nicht die neue Zeile mit den Einträgen in der jeweiligen Spalte. Was müsste man da dann noch verändern?

    Aber noch eine Frage: Wieso steht da zweimal String und einmal Integer? Muss man das das dann so anpassen, was man halt braucht?

    VB.NET-Quellcode

    1. Dim _Datum As New System.Data.DataColumn("Datum")
    2. _Datum.DataType = GetType([String])
    3. Dim _KM As New System.Data.DataColumn("KM")
    4. _KM.DataType = GetType([String])
    5. Dim _Fahrzeit As New System.Data.DataColumn("Fahrzeit")
    6. _Fahrzeit.DataType = GetType(Integer)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „gamer-bn“ () aus folgendem Grund: Frage hinzugefügt

    gamer-bn schrieb:

    Aber noch eine Frage: Wieso steht da zweimal String und einmal Integer? Muss man das das dann so anpassen, was man halt braucht?

    Richtig.
    Bei mir ist es so, bei Dir anders.
    Mach aus der Entfernung ein Double.
    Und:

    VB.NET-Quellcode

    1. Me._DataTable.Constraints.Add("Datumseintrag", _Datum, True)
    2. ' "Key1" ist der Name der Einschränkung; IDColumn ist Primärschlüssel
    3. Me._DataTable.Constraints.Add("KM Eintrag", _KM, True)
    4. Me._DataTable.Constraints.Add("Fahrzeiteintrag", _Fahrzeit, True)
    Du hast nun 3 Primary Keys in deiner Tabelle.
    Nimm sie besser alle 3 raus.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    VB.NET-Quellcode

    1. Me._DataTable.Constraints.Add("Datumseintrag", _Datum, True)
    2. ' "Key1" ist der Name der Einschränkung; IDColumn ist Primärschlüssel
    3. Me._DataTable.Constraints.Add("KM Eintrag", _KM, True)
    4. Me._DataTable.Constraints.Add("Fahrzeiteintrag", _Fahrzeit, True)


    Meinst du den Teil einfach rauslöschen? Oder was meinst du mit 3 Primary Keys?

    gamer-bn schrieb:

    Meinst du den Teil einfach rauslöschen?
    Ja.
    Was ist ein Primärschlüssel (Primary Key) :?:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ein Prmärschlüssel ist doch der Wert, nach dem eine Tabelle geordnet wird, oder?

    Wenn ich den Teil rausnehme, dann geht es immer noch nicht. Muss man da bei Button1 noch etwas hinzufügen, oder was fehlt denn noch?

    gamer-bn schrieb:

    Ein Prmärschlüssel ist doch der Wert,
    der für alle Datensätze unterschiedlich sein muss.

    gamer-bn schrieb:

    Muss man da bei Button1 noch etwas hinzufügen, oder was fehlt denn noch?

    Button1 :?: :?: :?:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Meinst Du so etwas?

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    2. Me._DataTable.Rows.Add(_DataTable.NewRow())
    3. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ja, genau. Doch jetzt legt er ja einfach eine neue leere Zeile an. Jetzt möchte ich, dass er eine neue Zeile anlegt und in die frisch angelegte Zeile In die Spalte Datum das aktuelle Datum einträgt, in der Spalte KM soll der Text von TextBoxKM stehen und in der Spalte von Fahrzeit soll der Text von TextBoxFahrzeit stehen. Das war ja auch schon das Problem von ANfang an.

    Hast du eine Idee, wie sich das lösen lässt?

    Mit Button2 legt man die neue Zeile an, in den jeweiligen Spalten soll wie oben erklärt der jeweilige Text stehen und Button1 ist jetzt sozusagen der "Tabelle speichern" Knopf. Das lässt sich ja dann auch noch zusammenlegen, doch jetzt geht es mir erst einmal um den Text in den jeweiligen Spalten.
    Da musst Du Dich durch die CurrentRow oder so des DataGridView durchhangeln.

    VB.NET-Quellcode

    1. Row(5).bla
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wie funktioniert das mit CurrentRow ?

    Ich habe schonmal einen Ansatz:

    VB.NET-Quellcode

    1. DataGridView1.CurrentRow.column("Datum").text = "Datumstext"


    Aber da stimmt auch einiges nicht. Kannst du mir bitte auf die Sprünge helfen?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „gamer-bn“ ()