Frage

Die Antwort auf diese Frage kann sich herausstellen zu sein „Sie tippte Datasets nicht verwenden, ohne die Bindung Navigator zu verwenden.“ Ich bin neugierig, aber über das Verhalten ich sehe.

So habe ich ein Formular, in dem jede Kontrolle aus dem Datenquellen-Explorer gezogen wurde. Ich löschte das Binding-Navigator, weil es hässlich und unpassend für diese besondere Form ist. Ich habe eine ListBox und die Datasource zum Binding.
Beachten Sie, dass das List-Box nicht gebunden ist, es füllt sich nur selbst aus dem Binding. Wie durch einen Zauber, rechne ich nicht auf, bewegte in der List-Box wird die Navigation in den Binding und all andere Steuerelemente aktualisiert entsprechend.

Ich kann den gebundenen Kontrollen Änderungen an und explizit EndEdit auf dem Binding aufrufen und dann die Datasource durch die Tabelle Adapter aktualisieren. Funktioniert prima.

Wenn ich Änderungen in den gebundenen Kontrollen machen und eine neue Option in der List-Box klicken, mag ich auf Änderungen überprüfen zu können und Aufforderung zum Speichern oder zurückgesetzt werden, wenn es welche gibt.

Hier ist der seltsame Teil, dass ich, um herauszufinden, nicht in der Lage gewesen.

Egal welches Event lege ich auf, DataSet.HasChanges kehrt nicht wahr, bis die zweite ListBox ändern. Ich habe gesucht und versucht, Dutzende von Vorschlägen, die meisten von ihnen lächerlich, aber ein paar, die vielversprechend schien. Kein Glück.

Edit: Es ist nicht der zweite Klick, die von Bedeutung ist, ist es, wenn Sie auf dem Original (bearbeitet) Element klicken zurück

.
War es hilfreich?

Lösung

Da die Frage zu stellen, ich habe ein bisschen mehr über BindingSources, Datasets und Tableadapters gelernt.

Hier ist, was funktioniert:

    private void MyListBox_Click(object sender, EventArgs e)
    {
        this.myBindingSource.EndEdit();
        if (myDataSet.HasChanges())
        {
            if (MessageBox.Show("Save changes?", "Before moving on", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                myTableAdapter.Update(myDataSet.myDataTable);
            }
            else
            {
                myDataSet.RejectChanges();
            }
        }
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top