Итак, нас осталось сделать кнопки навигации и сохранение данных при изменении. Одна кнопка вперед есть. Надо сделать кнопку назад, в самое начало и в самый конец.
Код к ним сделаем.
void CDialogAuthor::OnButtonNext() { try { m_pAuthor->MoveNext(); // вперед if (m_pAuthor->IsEOF()) throw CString(""); // если это последняя то новая нужна UpdateData(FALSE); // показать что там } catch(...) // если последняя, то создать новую { m_pAuthor->AddNew(); m_pAuthor->Update(); m_pAuthor->MoveLast(); // на последнею UpdateData(FALSE); // показать что там } } void CDialogAuthor::OnButtonLast() { m_pAuthor->MoveLast(); // на последнюю UpdateData(FALSE); } void CDialogAuthor::OnButtonPrev() { m_pAuthor->MovePrev(); if (m_pAuthor->IsBOF()) m_pAuthor->MoveNext(); // вперед если ушли за таблицу UpdateData(FALSE); } void CDialogAuthor::OnButtonFirst() { m_pAuthor->MoveFirst(); // на первую UpdateData(FALSE); }
Теперь наша задача будет научиться сохранять изменения если вдруг что-то введено. Так как при любом перемещении все происходит одинаково мы создадим функцию SaveDate.
void CDialogAuthor::SaveData() { m_pAuthor->Edit(); // начать редактирование UpdateData(TRUE); // сохранить данные m_pAuthor->Update(); // подтвердить }
И теперь ее нужно вызывать при каждом перемещении.
void CDialogAuthor::OnButtonNext() { try { SaveData(); ...... } ...... } void CDialogAuthor::OnButtonLast() { SaveData(); ...... } void CDialogAuthor::OnButtonPrev() { SaveData(); ...... } void CDialogAuthor::OnButtonFirst() { SaveData(); ...... } BOOL CDialogAuthor::DestroyWindow() { SaveData(); ...... }
Ну и давайте пояснения, что ли сделаем к полям.
И теперь все работает очень похоже на Access.