Einfaches Dataset über 2 Formen steuern

  • VB.NET
  • .NET (FX) 4.0

Es gibt 33 Antworten in diesem Thema. Der letzte Beitrag () ist von Snipy26.

    Einfaches Dataset über 2 Formen steuern

    Hallo,

    Habe da mal folgende Probleme.ich würde gerne so wie in dem Video youtube.com/watch?v=zboCFXpXZI4 die Inhalte der Text / Picture Box zum Dataset hinzufügen.

    Des Weiteren möchte ich gerne, das die BindingNavigator weg ist, sprich ich möchte gerne das AddNewItem auf den Add-Button haben, sowie den DeleteItem auf den Delete Button legen. Ziel ist es, über das eine Fenster Daten zur einer Datenbank hinzufügen, so das ich aus der Combobox das Spiel auswählen und starten kann, und über das Hauptprogramm das Spiel wieder aus der Datenbank entfernen kann.

    Hier mal der Code:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports Game_DB.gameliste
    3. Public Class Form2
    4. Dim Pfad As String
    5. Dim ofd As New OpenFileDialog
    6. Private _dataSource As String = "Game DB.xml"
    7. Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    8. If IO.File.Exists(_dataSource) Then
    9. Me.Gameliste1.ReadXml(_dataSource)
    10. End If
    11. End Sub
    12. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    13. 'Spiel in DB einfügen
    14. If TextBox1.Text = Nothing And TextBox3.Text = Nothing Then
    15. MsgBox("Bitte Name des Spieles eintragen oder Pfad angeben", MsgBoxStyle.Exclamation)
    16. ElseIf TextBox1.Text = Nothing Then
    17. MsgBox("Bitte Name des Spiels eingeben", MsgBoxStyle.Exclamation)
    18. ElseIf TextBox3.Text = Nothing Then
    19. MsgBox("Bitte Pfad auswählen", MsgBoxStyle.Exclamation)
    20. Else
    21. 'In DB die Daten hinzufügen
    22. Me.GamesBindingSource.AddNew()
    23. Me.Gameliste1.WriteXml(_dataSource)
    24. Me.GamesBindingSource.EndEdit()
    25. End If
    26. End Sub
    27. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    28. Form1.Show()
    29. End Sub
    30. Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    31. End Sub
    32. Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged
    33. End Sub
    34. Private Sub BindingNavigatorAddNewItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorAddNewItem.Click
    35. End Sub
    36. Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton1.Click
    37. 'Me.GamesBindingSource.EndEdit()
    38. 'Me.Gameliste1.WriteXml(_dataSource)
    39. End Sub
    40. Private Sub BindingNavigatorDeleteItem_Click(sender As Object, e As EventArgs) Handles BindingNavigatorDeleteItem.Click
    41. End Sub
    42. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    43. 'Delete - Button
    44. 'Me.GamesBindingSource.Clear()
    45. Me.GamesBindingSource.EndEdit()
    46. Me.Gameliste1.WriteXml(_dataSource)
    47. End Sub
    48. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    49. 'Pfad für die .exe Datei
    50. OpenFileDialog1.ShowDialog()
    51. Pfad = OpenFileDialog1.FileName
    52. TextBox3.Text = Pfad
    53. End Sub
    54. Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
    55. 'Pfad für.ico Datei
    56. If ofd.ShowDialog() = Windows.Forms.DialogResult.OK Then
    57. PictureBox1.Image = Image.FromFile(ofd.FileName)
    58. PictureBox1.BackgroundImageLayout = ImageLayout.Stretch
    59. End If
    60. End Sub
    61. Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
    62. 'Exit - BUtton
    63. Me.Close()
    64. End Sub
    65. End Class




    Das Controll Fenster ist jetzt erstmal mit drin, um zu prüfen, ob die daten gespeichert werden. aber da scheitere ich leider auch.

    Anbei auch nochmal das gesamte Projekt als Rar Datei im Anhang. Danke euch schon mal

    PS: Die anderen Formen sind so mit bei, damit ich das, wenn es mal läuft, so in das Haupt Programm übertragen kann
    Dateien
    • Game DB.rar

      (219,62 kB, 53 mal heruntergeladen, zuletzt: )
    Grüße Snipy26



    Auf jeder Aktion erfolgt immer eine Re-Aktion, und selbst wenn es nur ne Fehlermeldung ist. :thumbsup:
    Totales Chaos.
    1. Bevor Du weitermachst, bitte die empfohlenen VS-Einstellungen verwenden.
    2. Du hast 2 tDS-Instanzen auf Form1. Deine Controls sind über GamesBindingSource an Gameliste gekoppelt, aber die Daten lädst Du per Code in Gameliste1.
    3. Die mitgelieferten Datendateien enthalten entweder nix oder keine gültigen Daten für Dein tDS.
    4. Wenn Du ein Projekt hochlädst, dann Kannst Du bitte ohne obj-, .vs- und .git-Ordner hochladen. Den bin-Ordner nur dann einpacken, wenn dort notwendige Zusatzdateien drin sind.
    5. Wenn Du den BindingNavigator weghaben willst, dann lösch ihn doch. Ist doch kein eigener Code "in" den Buttons drin.
    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.
    Habe nochmal alles gelöscht, also beim Test Programm. Und nochmal ein neues erstellt. Mit .net v4.8. Habe mal hier den Debug Ordner mit angehangen. Komme da nicht weiter.

    Ich möchte gerne, das über den "Add Game" -Button das Spiel zum Dataset über DataTable hinzugefügt wird. Jedoch klappt das nicht. Über das BindingNavigator funzt das ja.
    Möchte aber gerne den BindingNavigatorAddItem auf den Button3 haben, dazu speichern. Und den roten X Button (BindingNavigatorDeleteIeItem) auf den Button5 nutzen, so das ich kein BindingNavigator brauch.
    Auf den Button Control öffnet sich eine neue Form, zum prüfen ob die Daten eingetragen werden oder nicht. Bleibt aber leer. Habe mir das von EDR angeschaut, aber er arbeitet ja mit sogar mit mehreren Datasets. Bin anscheinend zu blöd dazu ?(

    Ziel ist folgendes -> ich möchte über ein Fenster den Namen, Pfad und Icon in einer DB haben, und auf der MainForm mittels ComboBox die Datei auswählen können, und dadrüber auch Starten. Also das die ausgewählte ID der ProzessStart durchgeführt werden kann. Und auch das Spiel soll über ein Menü-Punkt aus der Liste entfernt werden können.
    Dazu auch eine weitere Frage: ist es überhaupt möglich, in der ComboBox den Namen und Icon anzeigen zu lassen? Glaube nicht oder?

    Hab es mal als Release gespeichert, und getestet. Die Daten werden, solange das Programm läuft, gespeichert, aber sobald das Programm beendet wird, sind die Daten auch weg.
    Dateien
    • Debug.zip

      (60,18 kB, 58 mal heruntergeladen, zuletzt: )
    Grüße Snipy26



    Auf jeder Aktion erfolgt immer eine Re-Aktion, und selbst wenn es nur ne Fehlermeldung ist. :thumbsup:

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

    Was sollen wir denn mit dem Debug-Ordner? Da ist ja kein Code drin, mit dem wir (direkt) arbeiten können. Dieser Ordner ist ein solcher, den wir effektiv überhaupt nicht brauchen.
    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.
    Sry, mein Fehler. Schande über mein Haupt. :whistling:

    Habe mal jetzt den ganzen Ordner reingepackt. Inklusive Codes und Co. :rolleyes:
    Dateien
    • game_db.zip

      (268,66 kB, 60 mal heruntergeladen, zuletzt: )
    Grüße Snipy26



    Auf jeder Aktion erfolgt immer eine Re-Aktion, und selbst wenn es nur ne Fehlermeldung ist. :thumbsup:
    Ich weiß ja nicht, wie sehr Du Dich z.B. mit EdRs VVV beschäftigt hast. Aber Dein Versuch, ein Game Deinem tDS hinzuzufügen, besteht aus: "Schreibe die bisherigen Daten in ne XML und dann verlasse den Editiermodus." Wenn man davon absieht, dass das die falsche Reihenfolge ist, fehlt auch der füge-dem-tDS-einen-Eintrag-hinzu-Befehl. Beim DeleteButton alias Button3 fehlt der Löschcode. Steht alles in dem Thread bzw. wird in den Videos gesagt/gezeigt. Stichworte sind für Dich: GameDataSet1.games.AddgamesRow und GamesBindingSource.RemoveCurrent

    Snipy26 schrieb:

    Habe mir das von EDR angeschaut, aber er arbeitet ja mit sogar mit mehreren Datasets
    Das ist aber kein gutes Argument. Oder Du hast die Videos nicht verstanden. Er arbeitet mit mehreren Instanzen desselben tDS. Und dann sorgt er dafür, dass alle Instanzen dieselben Daten bekommen. Nicht die gleichen. Oder gar andere. Das ist ja der Witz an der Sache. Bzw. die Besonderheit/Herausforderung. Man will ja eben formübergreifend standardmäßig dieselben Daten einsehen und manipulieren. Fügt man also in FormX einen Datensatz hinzu, soll ja FormY jenen neuen Datensatz auch "automatisch" kennen. Und nicht wieder bei null/Nothing anfangen.

    Snipy26 schrieb:

    ist es überhaupt möglich, in der ComboBox den Namen und Icon anzeigen zu lassen? Glaube nicht oder?
    Von Haus aus nicht, korrekt.

    Snipy26 schrieb:

    sobald das Programm beendet wird, sind die Daten auch weg.
    Nö. Die Daten sind da. Werden ja abgespeichert, sobald Du den Add-Button/Button3 betätigst. Die Daten werden also gespeichert. Aber wenn Du sie nach Programmstart nicht per GameDataSet1.ReadXml(_dataSource) einliest, tja, selber schuld, dann sieht es für das ungeübte Auge aus, als wären die Daten weg.

    Codeanmerkungen auf die Schnelle:

    Rümpel Deine importierten Namespaces aus. Da ist z.B. der VB6-Namespace Microsoft.VisualBasic drin.
    Codeanmerkungen wie hier

    VB.NET-Quellcode

    1. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    2. 'Add Game - Button
    sind ineffizient. Benenn doch einfach den Button entsprechend: BtnAddGame. Dann ist Rätselraten an anderen Stellen im Code beendet.
    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.

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

    @VaporiZed -> erstmal danke für deine Hilfe und vor allem auch deine Erklärungen. Denn werde ich mir die Videos noch mal anschauen und denn auch mit mehreren Datasets arbeiten. Hab jetzt mal alle 11 Videos in einer Playlist gemacht. ;) Bin davon aus, das ich mit einem Dataset von verschiedenen Formen drauf komme. Also wäre es sinnvoller, eine Hauptdataset zu erstellen, und für die beiden Formen ein unter geordnetes Dataset erstellen und da anbinden.

    Zum Thema Buttons mit Add und Delete: Gute Stichwörter mit GameDataSet1.games.AddgamesRow und GamesBindingSource.RemoveCurrent. Genau das ist was mir gefehlt hat. ;)

    Zum Thema GameDataSet1.ReadXml(_dataSource): dachte ich hätte es mit bei Form_Load mit eingetragen. aber Anscheinend nicht. Danke für den Hinweis. ;)

    Das mit den Button BtnAddGame ist ne gute Idee. Werde das mal auch umsetzen. Das ist mir auch schon aufgefallen. Mitunter ist man ja nur am scrollen, um zu schauen, welcher Button für was ist. ^^

    Wegen ComboBox -> also müsste ich ne ComboBox und ne PictureBox machen, so das denn beides angezeigt wird. Na mal schauen wie ich das mache.

    Aber auf jedenfalls wertvolle Infos bekommen von dir. Finde ich echt top. :thumbup:
    Grüße Snipy26



    Auf jeder Aktion erfolgt immer eine Re-Aktion, und selbst wenn es nur ne Fehlermeldung ist. :thumbsup:

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

    Mal ne Frage an der Stelle. Wollte nicht extra ein neues Thema auf machen, da ich es hier schon mit angesprochen habe.

    Habe jetzt mal eine PictureBox und eine ComboBox nebeneinander gemacht. Bekomme ich die einzelnen Seiten vom Rahmen weg? also bei der Combobox Links der Rahmen und bei der PictureBox soll der Rahmen rechts weg. Siehe Bild.

    Und denn mal was weiteres. Am PC steht bei mir die die kleinen Hilfe Texte bzw. rechts unten bei dem Eigenschaften Fenster das Beschreibungsfeld in deutsch. Am Laptop (MacOS mit win 11 über Parallels) ist es aber auf englisch. Die Menü Punkte selber sind auf deutsch. Einer eine Idee, wie ich das umstellen kann? (siehe Bild 2)
    Bilder
    • PictureBox.jpg

      2,63 kB, 258×185, 253 mal angesehen
    • Textfeld.jpg

      33,97 kB, 366×408, 48 mal angesehen
    Grüße Snipy26



    Auf jeder Aktion erfolgt immer eine Re-Aktion, und selbst wenn es nur ne Fehlermeldung ist. :thumbsup:
    Habe es jetzt hinbekommen, dass ich über den Add und Delete Button es in einer Form schon mal steuern kann. Also das die Daten eingetragen werdend auch gelöscht werden können, ohne den BindingNavigator zu nutzen. Zumindest wenn nur die beiden TextBoxen ausgefüllt sind (ist ja auch so eingestellt worden). ;) Sobald in der PictureBox ein Icon ist, kommt es zu Fehlern. Mal klappt es auch das ich ein Icon mit einbinden kann (1-2 mal vllt) und mal (sehr oft) nicht. Mal kommt der Fehler gleich beim ersten Icon und mal nach dem dritten Icon.

    Im Control-Fenster werden auch die Einträge angezeigt. Schon mal ein ganzes Ende weiter. Sowie auch in der ComboBox.


    Hier mal der gesamte Code:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports game_db.GameDataSet
    3. Public Class Form1
    4. Private _dataSource As String = "game_db.xml"
    5. Dim Pfad As String
    6. Dim ofd As New OpenFileDialog
    7. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    8. Dim _dataSoure = DirectCast(GamesBindingSource.Current, DataRowView)
    9. GameDataSet1.ReadXml(_dataSource)
    10. End Sub
    11. Private Sub BtnPath_Click(sender As Object, e As EventArgs) Handles BtnPath.Click
    12. 'Pfad für .exe Datei
    13. OpenFileDialog1.ShowDialog()
    14. Pfad = OpenFileDialog1.FileName
    15. TextBox2.Text = Pfad
    16. End Sub
    17. Private Sub BtnIcon_Click(sender As Object, e As EventArgs) Handles BtnIcon.Click
    18. 'Pfad für .icon Datei
    19. If ofd.ShowDialog() = Windows.Forms.DialogResult.OK Then
    20. PictureBox1.Image = Image.FromFile(ofd.FileName)
    21. PictureBox1.BackgroundImageLayout = ImageLayout.Stretch
    22. End If
    23. End Sub
    24. Private Sub BtnAddGame_Click(sender As Object, e As EventArgs) Handles BtnAddGame.Click
    25. 'Add Game - Button
    26. Dim text As String = ""
    27. Dim caption As String = "Game Manager"
    28. If TextBox1.Text = Nothing And TextBox2.Text = Nothing Then
    29. MessageBox.Show("Bitte Name des Spieles eintragen oder Pfad angeben", caption, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    30. ElseIf TextBox1.Text = Nothing Then
    31. MessageBox.Show("Bitte Name des Spiels eingeben", caption, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    32. ElseIf TextBox2.Text = Nothing Then
    33. MessageBox.Show("Bitte Pfad auswählen", caption, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    34. Else
    35. 'In DB die Daten hinzufügen
    36. Me.GamesBindingSource.AddNew()
    37. Me.GameDataSet1.WriteXml(_dataSource)
    38. Me.GamesBindingSource.EndEdit()
    39. End If
    40. End Sub
    41. Private Sub BtnControl_Click(sender As Object, e As EventArgs) Handles BtnControl.Click
    42. 'Control - Button
    43. Me.Visible = False
    44. Form2.Show()
    45. End Sub
    46. Private Sub BtnDelete_Click(sender As Object, e As EventArgs) Handles BtnDelete.Click
    47. 'Delete - Button
    48. Me.GamesBindingSource.RemoveCurrent()
    49. Me.GameDataSet1.WriteXml(_dataSource)
    50. Me.GamesBindingSource.EndEdit()
    51. End Sub
    52. Private Sub BtnExit_Click(sender As Object, e As EventArgs) Handles BtnExit.Click
    53. 'Exit - Button
    54. Me.Close()
    55. End Sub
    56. End Class


    Bekomme folgende Fehlermeldung:

    Unbehandelte Ausnahme:
    System.InvalidOperationException: "Type 'System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' does not implement IXmlSerializable interface therefore can not proceed with serialization."

    Und Hier wenn ich auf Details kopieren gehe.
    Spoiler anzeigen

    System.InvalidOperationException
    HResult=0x80131509
    Nachricht = Type 'System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' does not implement IXmlSerializable interface therefore can not proceed with serialization.
    Quelle = System.Data
    Stapelüberwachung:
    at System.Data.XmlDataTreeWriter.XmlDataRowWriter(DataRow row, String encodedTableName)
    at System.Data.XmlDataTreeWriter.Save(XmlWriter xw, Boolean writeSchema)
    at System.Data.DataSet.WriteXml(String fileName, XmlWriteMode mode)
    at System.Data.DataSet.WriteXml(String fileName)
    at game_db.Form1.BtnAddGame_Click(Object sender, EventArgs e) in \\Mac\Home\Desktop\VB Basic\Game DB\game_db\game_db\Form1.vb:line 56
    at System.Windows.Forms.Control.OnClick(EventArgs e)
    at System.Windows.Forms.Button.OnClick(EventArgs e)
    at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
    at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    at System.Windows.Forms.Control.WndProc(Message& m)
    at System.Windows.Forms.ButtonBase.WndProc(Message& m)
    at System.Windows.Forms.Button.WndProc(Message& m)
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
    at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
    at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
    at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
    at game_db.My.MyApplication.Main(String[] Args) in :line 83

    Formatierung korrigiert und Spoiler gesetzt ~VaporiZed
    Grüße Snipy26



    Auf jeder Aktion erfolgt immer eine Re-Aktion, und selbst wenn es nur ne Fehlermeldung ist. :thumbsup:

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

    Wofür ist Zeile#10? Die Variable _dataSoure wird ja nicht weiterverwendet, daher nicht erkennbar.
    Welchen Dateityp lädst Du als Datei für die Bilder?
    Die Fehlermeldung sagt, dass Du versuchst, eine Bitmap zu serialisieren. Wann tritt der Fehler genau auf?
    Ansonsten: Projekt hochladen und uns testen lassen.
    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.
    @VaporiZed
    Nachdem ich das bei mir eingetragen habe, werden die Daten korrekt geladen. Habe es bei EDR in den einem Video gesehen, wo das mit dem DirectCast(GamesBindingSource.Current, DataRowView) war. Und ich wollte eigentlich Dim _dataSource machen. Habe aber das R vergessen. Komische ist, zumindest für mich, es klappt das ich in 2 Formen die Daten einsehen kann. ?( daher habe ich es so gelassen. Ich habe es nur für meine Datenbank angepasst.
    Wegen den Bildern, ich habe es mit .ico und mit .png versucht. und ich glaub auch einmal mit .jpeg. :huh:

    @ErfinderDesRades Ich muss mich bei dir in aller höflichster Form entschuldigen. Habe da komplett was verwechselt. Meinte eigentlich DataTable. Für mein Projekt brauche ich, denke ich mal, nur ein DataTable. Da ID = Icon = Name = Pfad ist. Eine Beziehung zu einer anderen ID ist nicht vorgesehen und auch nicht gewollt. Aber top Videos. Nur ich komme da bissel durcheinander, wegen den mehreren DataTable.


    Wegen folgenden:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Dim _dataSoure = DirectCast(GamesBindingSource.Current, DataRowView)
    3. GameDataSet1.ReadXml(_dataSource)
    4. End Sub


    Ich arbeite aktuell in einem Test Programm. Und da da es ja lief, bis auf das mit den Bildern, habe ich es mit in meinem eigentlichen Programm übernommen.
    Nur mit den Unterschied, das über die eine Form die Daten eingetragen werden können, und in der MainForm mittels ComboBox das ausgewählt werden kann. Jedoch wenn ich die Daten eintrage über die Form3, bleibt die Combobox Leer. Was in meinen Testprogramm nicht ist. Die ComboBox habe ich, hoffe ich mal, dem DataBinding entsprechend zugewiesen.
    Folgender Ablauf: In Form 3 werden die Daten über 2 TextBoxen und Picture Box aufgenommen und dann kommt folgender Code:

    VB.NET-Quellcode

    1. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    2. 'Spiel in DB einfügen
    3. Dim text As String = ""
    4. Dim caption As String = "Game Manager"
    5. If TextBox1.Text = Nothing And TextBox2.Text = Nothing Then
    6. MessageBox.Show("Bitte Name des Spieles eintragen oder Pfad angeben", caption, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    7. ElseIf TextBox1.Text = Nothing Then
    8. MessageBox.Show("Bitte Name des Spiels eingeben", caption, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    9. ElseIf TextBox2.Text = Nothing Then
    10. MessageBox.Show("Bitte Pfad auswählen", caption, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    11. Else
    12. 'In DB die Daten hinzufügen
    13. Me.GamesBindingSource.AddNew()
    14. Me.GameDataSet1.WriteXml(_dataSource)
    15. Me.GamesBindingSource.EndEdit()
    16. Form4.Show()
    17. Me.Close()
    18. End If
    19. End Sub


    Anschliessend schließt sich Form 3 und MainForm kommt wieder. Als Zusatzinfo, die MainForm ist solange auf Visible = False gesetzt.

    Habe bei den 3 Formen, die Zugriff auf die DataSet haben, das drin (ist aus einer Form jetzt kopiert. Bei den anderen Formen steht statt "Form2" die entsprechende Zahl für die eigene Form):

    VB.NET-Quellcode

    1. ​Imports System.IO
    2. Imports game_db.GameDataSet
    3. Public Class Form2
    4. Private _dataSource As String = "game_db.xml"
    5. Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    6. Me.Refresh()
    7. Dim _dataSoure = DirectCast(GamesBindingSource.Current, DataRowView)
    8. Me.GameDataSet.ReadXml(_dataSource)
    9. End Sub


    Als Zusatzinfo: Zwischen den Formen ist eine zusätzliche Form mit ein Ladebildschirm als optischen Übergang mit drin. Also Form3 -> Form4 -> MainForm (Add Fenster -> optischer Ladebildschirm -> Hauptform)
    Grüße Snipy26



    Auf jeder Aktion erfolgt immer eine Re-Aktion, und selbst wenn es nur ne Fehlermeldung ist. :thumbsup:

    Snipy26 schrieb:

    Wegen folgenden:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Dim _dataSoure = DirectCast(GamesBindingSource.Current, DataRowView)
    3. GameDataSet1.ReadXml(_dataSource)
    4. End Sub
    Ähm - dieser Code scheint mir Quatsch.
    ich wüsste nicht, dass man der .ReadXml-Methode ein DataRowView übergeben könnte.

    (Aber ich kann mir irren, in immer neuen Framework-Versions werden natürlich immer neue Features bereitgestellt, die ich möglicherweise "verpasse")
    @ErfinderDesRades: Neenee, daher schrieb ich, dass die Variable nicht verwendet wird. In der oberen steht _dataSoure, nicht _datasourCe, wie in der Zeile darunter.
    @Snipy26: In Form2 ist derselbe Schreibfehler im selben komischen Konstrukt drin. Egal, ich kann's ohne hochgeladenes Projekt nicht nachvollziehen, da mir die Gelduld grad fehlt, es nachzubauen.
    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.

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

    Wenn ich in beiden mit _dataSource schreibe, meckert der Komplexer rum. Und so meckert er nicht. Anbei mal die zip Datei vom Gesamten Test DB Projekt
    Dateien
    • Game DB.zip

      (558,98 kB, 48 mal heruntergeladen, zuletzt: )
    Grüße Snipy26



    Auf jeder Aktion erfolgt immer eine Re-Aktion, und selbst wenn es nur ne Fehlermeldung ist. :thumbsup:

    Snipy26 schrieb:

    Wenn ich in beiden mit _dataSource schreibe, meckert der Komplexer rum.
    Komplexer? Was'n ditte? Na egal. Klar meckert der Compiler. Weil die Zeilen dann Blödsinn ergeben. GameDataSet1.ReadXml fordert als Parameter nen Dateinamen, nen Stream, nen XMLreader oder sonstewas. Aber Du versuchst der Funktion ein DataRowView unterzuschieben. Und das ist Schwachfug.
    Dein Problem kann ich immer noch nicht nachvollziehen. Gib mal ne Anleitung zum Fehler. Auch Dein Code ist nicht nachvollziehbar. Wo fügst Du dem tDS die eingegebenen Daten hinzu?

    VB.NET-Quellcode

    1. Me.GamesBindingSource.AddNew()
    im [Add Game]-Button jedenfalls fügt der zugehörigen DataTable einen LEEREN Eintrag hinzu. Die im GUI eingegebenen Daten sind weg, sobald man auf [Add Game] klickt.
    Und nochmal: ERST GamesBindingSource.EndEdit, DANN irgendwas anderes mit GamesBindingSource machen. NICHT GamesBindingSource.EndEdit zum Schluss.
    Und wenn ich Form2.Show lese … :cursing: Dialoge richtig instanziieren
    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.
    Nicht ganz, was denn Add Button angeht. Habe in den ja ein Control Fenster drin, und wenn ich Add Button drücke, werden die Daten ins Dataset geschrieben. so wie ich es ja möchte. und wenn ich mehrere Einträge in über die Textboxen eintrage, werden diese dann auch gespeichert. In meinem Test DB Programm funktioniert das ja, wie ich es möchte. Nur bei den Icons zickt er rum.

    Es soll ja so sein, das in meinen Hauptprogramm sichern neues Fenster öffnet, ich den Name, Pfad und Icon aussuche und in die DB eingetragen wird. Dann geht automatisch das Fenster zu, und das Hauptfenster ist mit der Combobox wieder da. Und dort kann ich das Spiel aus der Liste auswählen und direkt daraus heraus starten. Zumindest ist das der Plan. :D

    Meine ja den Compiler. Schreibe am MacBook und der hat Autokorrektur drin. Und ich hatte es am Anfang mit K geschrieben. Der hat denn daraus Komplexer gemacht. Sry dafür. :rolleyes:

    Ok, werde die Reihenfolge mit den EndEdit ändern.

    Wegen mein Hauptprogramm habe ich auch schon eine Vermutung, warum da es leer bleibt. Die MainForm wird ja nicht neu geladen, dadurch bleibt ja auch die Combobox leer. Oder sehe ich das falsch?

    Und zum Thema mit Form2.Show(), das mache ich danach. Wollte nicht wieder 3 verschiedene Baustellen anfangen. Und da das damit ja erstmal geht, auch wenn es nicht korrekt ist, würde ich erstmal das Thema DB abhacken. Das mit den MsgBox als Beispiel habe ich ja auch korrigiert, sie wie es richtig sein soll. Daher verzeih mir bitte, das dies erstmal nicht als Priorität bei mir ist. Sonst verhaspel ich mich und bringe noch mehr durcheinander. ;(
    Grüße Snipy26



    Auf jeder Aktion erfolgt immer eine Re-Aktion, und selbst wenn es nur ne Fehlermeldung ist. :thumbsup:

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

    Wenn ich das Programm aus Post#16 starte und Daten in die TextBoxen eingebe und dann auf [Add Game] klicke, sind die Daten weg. Die werden auch nicht angezeigt, wenn ich danach auf [Control] klicke. Was machst Du anders?
    Meine Reihenfolge:
    • Programm starten
    • Daten in TextBox1 und TextBox2 eingeben (eine Umbenennung derselbigen wäre sinnvoll)
    • [Add Game] anklicken -> alle Daten weg
    • [Control] anklicken -> leere Tabelle
    • Inhalt der XML-Datei anschauen -> leeres tDS-Grundgerüst ohne meine eingegebenen Daten
    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.
    Der erste Add bleibt bei mir auch leer. Aber ab den zweiten Add werden die Daten eingetragen. Was mir nur auffällt ist, das wenn ich eins lösche, das die ID sich nicht korrigiert.

    Hier mal ein Video dazu

    Und wenn ich das Programm schließe, und neu starte, sind die Daten weiterhin da.
    Grüße Snipy26



    Auf jeder Aktion erfolgt immer eine Re-Aktion, und selbst wenn es nur ne Fehlermeldung ist. :thumbsup: