다음을 통해 공유


두 번째 레코드 집합에서 목록 상자 채우기

기본적으로 레코드 뷰는 그 필드가 레코드 뷰의 컨트롤로 매핑되는 단일 레코드 집합 개체와 연결됩니다. 레코드 뷰에 목록 상자나 콤보 상자 컨트롤을 넣고 이 상자를 두 번째 레코드 집합 개체의 값으로 채우려는 경우가 있습니다. 사용자는 목록 상자를 사용하여 새로운 정보 범주를 선택하고 레코드 뷰에 표시할 수 있습니다. 이 항목에서는 이 작업을 수행하는 방법과 수행하는 시기에 대해 설명합니다.

데이터 소스의 데이터로 콤보 상자나 목록 상자를 채우면 속도가 느려질 수 있으므로 레코드 수가 많은 레코드 집합의 데이터로 컨트롤을 채울 때는 주의해야 합니다.

이 항목에서 사용한 모델은 폼의 컨트롤을 채우는 기본 레코드 집합과 목록 상자나 콤보 상자를 채우는 보조 레코드 집합으로 이루어집니다. 목록 상자에서 문자열을 선택하면 선택한 문자열을 기반으로 프로그램에서 기본 레코드 집합을 다시 쿼리합니다. 다음 절차에서는 콤보 상자를 사용하지만 목록 상자에도 똑같이 적용됩니다.

두 번째 레코드 집합에서 콤보 상자나 목록 상자를 채우려면

  1. ODBC일 경우에는 CRecordset, DAO일 경우에는 CDaoRecordset으로 레코드 집합 개체를 만듭니다.

  2. 콤보 상자 컨트롤의 CComboBox 개체에 대한 포인터를 가져옵니다.

  3. 콤보 상자에 있는 이전 내용을 비웁니다.

  4. 콤보 상자에 추가할 현재 레코드의 각 문자열에 대해 CComboBox::AddString을 호출하여 레코드 집합의 모든 레코드를 이동합니다.

  5. 콤보 상자에서 선택을 초기화합니다.

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 값을 추가합니다. 마지막으로 콤보 상자의 선택을 설정합니다.

참고 항목

개념

레코드 뷰

ODBC 드라이버 목록