2 Forms 1 Dataset

  • VB.NET

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

    2 Forms 1 Dataset

    Moin,

    ich habe ein Problem und finde keine Lösung dazu. Und zwar habe ich ein Programm geschrieben, in dem einige DGVs vorhanden sind und die an ein typisiertes Dataset gekoppelt sind. Der Inhalt kann übe eine Funktion als XML Datei gespeichert und geladen werden.
    Nun möchte ich noch eine Kommentarfunktion einbauen. Das kann zB so aussehen, dass man neben den Tabellen einen toggleButton hat und beim Klicken klappt ein Textfeld auf, in das man schreiben kann. Der Inhalt soll mit abgespeichert werden.
    Aus Platzmangel habe ich es so gelöst, dass man mit dem Button eine neue Form (Form2) öffnet, die nichts als ein Textfeld beinhaltet. Auf- und Zuklappen der Form2 funktioniert, nur wird beim Aufrufen der Speichern-Funktion der Kommentar nicht mit übernommen.
    Ich bin so vorgegangen, dass ich eine neue Form erstellt habe und eine Textbox reingesetzt habe. Anschließend habe ich eine neue DataTable in meinem vorhandenen Dataset erstellt, und die deren einzige Spalte im Datenquellen-Fenster per Drag&Drop auf die Textbox gezogen. Im Designer von Form2 wird mit mein Dataset und der Adapter angezeigt.

    Die Buttonfunktion soll das Aktualisieren des Datasets machen, damit das mit dem save klappt:

    Quellcode

    1. Private Sub cbButton_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbButton.CheckedChanged
    2. If cbButton.Checked = True Then
    3. cbButton.BackColor = SystemColors.ControlDark
    4. Form2.Show()
    5. Form2.TopMost = True
    6. Else
    7. cbButton.BackColor = SystemColors.Control
    8. Form2.Hide()
    9. Form2.TopMost = False
    10. 'Dataset aktualisieren
    11. End If
    12. End Sub


    Alternativ habe ich schon versucht, ein aufklappbares Panel einzufügen (also ohne 2. Form), aber das klappt nicht durch die ganzen anderen Komponenten; es wird von anderem überdeckt und .bringtofront() bringt nichts.
    Angenommen du hast die Textbox auf Form2 noch nicht benannt. So kannst du beim Speicheralgorythmus mit Form2.Textbox1.text den inhalt der Textbox mit abspeichern ;) (Am besten als notiz element am Ende der XML)
    Viele Frauen kamen, viele sind gegangen, eine ist geblieben 12.5.12 <3 ich liebe dich Schatz :love: :love:
    was dir vorschwebt löst man gewöhnlich mit einem Dialog.

    Aber in dieser Primitiv-Form kannst du sogar einfach olle Microsoft.VisualBasic.Inputbox.ShowDialog() aufrufen. Das gibt dir den eingegebenen String zurück oder bei Cancel "".

    jdfs. Dialoge öffnet man nicht mit .Show(), sondern mit .ShowDialog()

    Linkai schrieb:

    So kannst du beim Speicheralgorythmus mit Form2.Textbox1.text den inhalt der Textbox mit abspeichern


    Ich verstehe nicht ganz wie :S

    Die Inputbox habe ich mir mal angeschaut. Die ist leider nur eine Zeile groß, das ist etwas zu wenig. Ich habe keine Ahnung wie lang die Kommentare im Endeffekt sein werden. Ich schätze mal irgendwas zwischen 10 und 200 Zeichen.
    Super, hat nach ein bissl rumprobieren geklappt:

    Quellcode

    1. Dim Kommentar As String
    2. Dim Dialogfenster As New Form2
    3. Private Sub btnComment_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnComment.Click
    4. If Dialogfenster.tbKommentar.Text <> "" Then
    5. Dialogfenster.tbKommentar.Text = Kommentar
    6. End If
    7. If Dialogfenster.ShowDialog(Form2) = Windows.Forms.DialogResult.OK Then
    8. Kommentar = Dialogfenster.tbKommentar.Text
    9. Return
    10. End If
    11. End Sub


    So, das neue Problem ist jetzt, dass ich meine Tabellen mittels WriteXML() speicher. Kann ich da den Kommentar noch irgendwie ans Ende anhängen? (Ich hab Code gefunden zum xml datei per code zu erstellen, aber nichts was in meine richtung geht.)
    Iwie etwas an ein WriteXml dranhängen geht nicht.

    Du musst wohl mal anfangen, Datenmodellierung zu verstehen. Weil deine Kommentare gehören ebenso ins Datenmodell wie alles annere, was darin ist. Und sobald im Datenmodell auch die Kommentare vorgesehen sind, werden sie mit WriteXml auch mit-gespeichert, was sonst?

    Ich kenn nicht deinen Wissenstand, aber überprüfe ihn mal auf Lücken, und schließe diese: Datenverarbeitungs-Vorraussetzungen

    jdfs sowas:

    VB.NET-Quellcode

    1. Dialogfenster.ShowDialog(Form2)
    zeigt gleich mehrere Löcher.
    1. Du verwendest einen Datentyp als Objekt. Wusstest du, dass Form2 ein Datentyp ist?
    2. Du weisst gar nicht, was der Parameter da bezwecken soll.
    Jo, geh mal das Verlinkte Punkt für Punkt durch. Zu den Löchern hier finden sich dort unter Punkt #2,#3 HInweise.
    Datenmodellierung ist unter 5 erläutert, und ob dir das dortige #1 fehlt, halte ich für durchaus möglich.
    Wie gesagt: Am besten alles sorgfältig durcharbeiten.
    Natürlich geht das du Nase :D
    Bevor ich die WriteXML aufrufe meinen String in die entsprechende Datatable schreiben

    Quellcode

    1. Dim newRow As Datas.dtKommentarRow 'Füge Kommentar ins Dataset ein
    2. newRow = Datas.dtKommentar.NewdtKommentarRow
    3. newRow.Kommentar = Kommentar
    4. Datas.dtKommentar.Rows.Add(newRow)

    Danach normal WriteXML

    Und das Laden geht ganz normal: ReadXML() und anschließend mit "Kommentar = Datas.dtKommentar(0).Kommentar" der Variablen den Inhalt geben
    ich hab nicht gesagt, dasses nicht geht. Ich hab nur gesagt, dass du einen Datentyp als Objekt benutzst, was in vb leider mit Forms (und nur mit Forms) zu gehen scheint (tatsächlich spielt unsichtbarer Hintergrund-Code da die Hauptrolle).

    Und dass das geht, verhindert, dass du den Unterschied von Datentyp und Objekt erkennen kannst.

    Und ich hab festgestellt, du weißt nicht, was der Parameter überhaupt bezweckt.

    Also ich will dich nicht runtermachen, sondern Interesse wecken, zu verstehen, was du da programmierst.

    ZB zu verstehen, warum

    VB.NET-Quellcode

    1. If Dialogfenster.ShowDialog() = Windows.Forms.DialogResult.OK Then
    einfacher und sauberer wäre (und natürlich auch geht).