기본적으로 레코드 뷰는 해당 필드가 레코드 뷰의 컨트롤로 매핑되는 단일 레코드 집합 개체와 연결됩니다. 레코드 뷰에 목록 상자 또는 콤보 상자 컨트롤을 삽입하고 두 번째 레코드 집합 개체의 값을 채우는 경우가 있습니다. 이때 사용자는 목록 상자를 사용하여 레코드 뷰에 표시할 새 정보 범주를 선택할 수 있습니다. 이 항목에서는 이러한 작업을 수행하는 방법과 시기에 대해 설명합니다.
팁
데이터 소스에서 콤보 상자나 목록 상자를 채우는 작업은 속도가 느릴 수 있습니다. 그러므로 가급적이면 레코드 수가 많은 레코드 집합에서 컨트롤을 채우지 않아야 합니다.
이 항목의 모델은 폼의 컨트롤을 채우는 기본 레코드 집합과 목록 상자 또는 콤보 상자를 채우는 두 번째 레코드 집합으로 구성됩니다. 목록 상자에서 문자열을 선택하면 선택한 항목에 따라 프로그램이 기본 레코드 집합을 다시 쿼리합니다. 다음 절차에서는 콤보 상자를 사용하지만 목록 상자에도 동일한 절차가 적용됩니다.
두 번째 레코드 집합에서 콤보 상자 또는 목록 상자를 채우려면
레코드 집합 개체(CRecordset)를 만듭니다.
콤보 상자 컨트롤의 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 멤버 함수를 호출하여 레코드의 과정 ID 값을 추가합니다. 마지막으로 코드가 콤보 상자의 선택 항목을 설정합니다.