Заполнение списка из второго набора записей (доступ к данным MFC)
По умолчанию представление записей связано с одним объектом набора записей, поля которого сопоставляются элементам управления представления записей. Иногда может возникнуть необходимость поместить элемента управления списком или полем со списком в представление записей и заполнить его значениями из второго объекта набора записей. Можно использовать поле со списком для выбора новой категории сведений для отображения в представлении записей пользователя. В этом разделе объясняется, как и когда это можно сделать.
Совет
Имейте в виду, что заполнение поля со списком или списка из источника данных может быть медленным.Учитывайте этот факт при заполнении элемента управления данными из набора с большим числом записей.
Модель для этого раздела состоит из основного набора записей для заполнения элементов управления формы, и вторичного набора для заполнения списка или поля со списком. При выборе строки в списке вызывает повторный запрос первого набора записей на основании выбранной программе. Следующая процедура использует поле со списком, но применяется одинаково и к списку.
Чтобы заполнить поле со списком или список из второго набора записей
Создание объекта набора записей (CRecordset для ODBC, CDaoRecordset для DAO).
Получение указателя на объект CComboBox для элемента управления полем со списком.
Очистите поле со списком от любого предыдущего содержимого.
Перемещение по всем записям в наборе записей, вызов метода CComboBox::AddString для каждой строки из текущей записи для добавления в поле со списком.
Инициализируйте выбор элементов в поле со списком.
void CSectionForm::OnInitialUpdate()
{
// ...
// Fill the combo box with all of the courses
CENROLLDoc* pDoc = GetDocument();
if (!pDoc->m_courseSet.Open())
return;
// ...
m_ctlCourseList.ResetContent();
if (pDoc->m_courseSet.IsOpen())
{
while (!pDoc->m_courseSet.IsEOF() )
{
m_ctlCourseList.AddString(
pDoc->m_courseSet.m_CourseID);
pDoc->m_courseSet.MoveNext();
}
}
m_ctlCourseList.SetCurSel(0);
}
В этой функции используется второй набор записей, m_courseSet, который содержит записи по всем предлагаемым курсам и элемент управления CComboBox , m_ctlCourseList, который хранится в классе представления записей.
Функция получает m_courseSet из документа и открывает его. Затем она очищает m_ctlCourseList и совершается прокрутку по m_courseSet. Для каждой записи, функция вызывает для поля со списком функцию-член AddString, чтобы добавить идентификатор курса из записи. И, наконец, код задает для поля со списком выбранный элемент.