Na formularzu umieściłem m.in. przycisk "Zapisz", który wywołuje funkcję ZapiszFakturę() i prawidłowo zapisuje dane do tabel :
private void buttonZapisz_Click_1(object sender, EventArgs e)
{ ZapiszFakture(); }
private bool ZapiszFakture()
{
BindingManagerBase MojObj = this.fakturypozycjeDataGridView.BindingContext[dataSetFaktury.Tables["fakturypozycje"]];
for (int i = MojObj.Count - (this.fakturypozycjeDataGridView.RowCount -1); i < MojObj.Count; i++)
{
MojObj.Position = i;
DataRow row = ((DataRowView)MojObj.Current).Row;
row["NrFaktury"] = this.nrFakturyTextBox.Text;
}
this.Validate();
this.fakturypozycjeBindingSource.EndEdit();
this.fakturyBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.dataSetFaktury);
return true;
}
Ze względów estetycznych postanowiłem jednak zamiast przycisków, wprowadzić MenuStrip, które dodatkowo ma wbudowaną obsługę skrótów klawiszowych.
Do pozycji menu przypisałem te same funkcje, które obsługiwały przyciski i wszystko działa prawidłowo z wyjątkiem nieszczęsnej procedury "Zapisz" :
private void zapiszToolStripMenuItem_Click(object sender, EventArgs e)
{ ZapiszFakture(); }
Zdarzenie wybrania w menu pozycji "Zapisz", wywołuje dokładnie tą samą funkcję, która obsługuje przycisk "Zapisz". Niestety, w pzypadku wywołania jej z poziomu menu, funkcja nie działa prawidłowo. Zaczyna się "wysypywać" obsługa BindingManagerBase (następuje pogubienie się w pozycjach rekordów).
Testowo ustawiłem na formularzy zarówno przycisk "Zapisz" jak i obsługę zapisu z poziuomu MenuStrip - jeżeli zapis faktury wybiorę przyciskiem, to wszystko jest O.K. , jeżeli z menu, występują błedy w obsłudze.
Czy ma ktoś jakiś pomysł dlaczego tak jest ?
PS.
Z ciekawości obsłużyłem jeszcze zdarzenie KeyDown, ale również "wysypuje" się obsługa BindingManagerBase :(
private void FormFaktura_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F4)
ZapiszFakture();
}