Как связать CRecordset с CDialog
|
В документации Visual C++ ENROLL описывается, как соединить элементы управления CRecordView с полями переменных CRecordset. Небольшая доработка поможет связать поля переменных с элементами управления CDialog. В данной статье описываются шаги, которые необходимо предпринять для этого. Подключить CRecordset к CDialog можно точно так же, как CRecordset к CRecordView. Как только CRecordset и CDialog созданы, проделайте следующие шаги: - При помощи ClassWizard, укажите класс CRecordset как 'foreign class' для CDialog. Вот пример, как это делается с диалогом CAboutDlg в примере ENROLL:
- Для Visual C++ 2.x, из директории \MSVC\MFC\SAMPLES\ENROLL\STEP1 загружается проект ENROLL step 1, а для Visual C++ 4.0 из директории \MSDEV\SAMPLES\MFC\TUTORIAL\ENROLL\STEP1.
- Запускается ClassWizard (CTRL+W).
- В выпадающием списке 'Class Name' выбирается класс 'CAboutDlg'.
- В ClassWizard, выбирается закладка 'Class Info'.
- В выпадающем списке 'Foreign Class' выбирается 'CSectionSet'. CSectionSet это класс CRecordset который Вам необходимо связать с диалогом.
- В окошке редактирования 'Foreign Variable' напишите m_pSet (произвольное название).
После этого для класса CAboutDlg будет создана переменная-член m_pSet. Переменная m_pSet будет указывать на объект CSectionSet.
- В Visual C++ 4.0, чтобы добавить элементы управления к CDialog, воспользуйтесь редактором ресурсов. В более ранних версиях Visual C++, для этого прийдётся воспользоваться AppStudio.
- Добавьте следующий код к CDialog, чтобы назначать, открывать и закрывать записи (recordset). Например:
BOOL CAboutDlg::OnInitDialog() { CEnrollDoc * pDoc=(CEnrollDoc *) (GetParentFrame()-> GetActiveDocument()); m_pSet= &(pDoc->m_SomeRecordset); m_pSet->Open();
CDialog::OnInitDialog();
return TRUE; }
Перед тем, как использовать этот код, убедитесь, что объект CSectionSet (наследованный от CRecordset) объявлен как public переменная класса CEnrollDoc (наследованного от CDocument). Обратите внимание, что в коде, приведённом выше, эта переменная называется 'm_SomeRecordset'. Так же можно добавить дополнительный код для проверки CDBExceptions а так же чтобы позволить пользователю перемещаться по записям. ЗАМЕЧАНИЕ: данный код не закрывает объект CRecordset. Это можно сделать в OnOK и OnCancel в деструкторе CDialog, либо когда объект CRecordset самостоятельно разрушится.
|