Partager via


Remplissage d'une zone de liste à partir d'un second recordset

Par défaut, une vue de l'enregistrement est associée à un seul objet Recordset, dont les champs sont mappés aux contrôles de la vue de l'enregistrement. Parfois, vous souhaiterez placer un contrôle zone de liste ou zone de liste déroulante dans la vue de l'enregistrement et le remplir de valeurs provenant d'un second objet Recordset. L'utilisateur peut utiliser la zone de liste pour sélectionner une nouvelle catégorie d'informations à afficher dans la vue de l'enregistrement. Cette rubrique explique comment et quand réaliser cette opération.

Conseil

Sachez que le remplissage d'une zone de liste déroulante ou d'une zone de liste à partir d'une source de données est une opération qui peut être lente. Prenez garde de ne pas essayer de remplir un contrôle à partir d'un recordset contenant un grand nombre d'enregistrements.

Le modèle pour cette rubrique se compose d'un recordset principal qui remplit les contrôles de votre formulaire, et d'un recordset secondaire qui remplit une zone de liste ou une zone de liste déroulante. À la suite de la sélection d'une chaîne dans la zone de liste, votre programme réinterroge le recordset principal en fonction de la sélection opérée. La procédure suivante utilise une zone de liste déroulante, mais s'applique également à une zone de liste.

Pour remplir une zone de liste déroulante ou une zone de liste à partir d'un second recordset

  1. Créez l'objet Recordset (CRecordset pour ODBC, CDaoRecordset pour DAO).

  2. Récupérez un pointeur désignant l'objet CComboBox pour le contrôle zone liste modifiable.

  3. Videz la zone de liste déroulante de son contenu, si nécessaire.

  4. Déplacez-vous entre tous les enregistrements du recordset, en appelant CComboBox::AddString pour chaque chaîne à partir de l'enregistrement en cours que vous voulez ajouter à la zone de liste déroulante.

  5. Initialisez la sélection dans la zone de liste déroulante.

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);
}

Cette fonction utilise un second recordset, m_courseSet, qui contient un enregistrement pour chaque cours organisé et un contrôle CComboBox, m_ctlCourseList, qui est stocké dans la classe d'affichage de l'enregistrement.

La fonction obtient m_courseSet à partir du document et l'ouvre. Ensuite, elle vide m_ctlCourseList et fait défiler m_courseSet. Pour chaque enregistrement, la fonction appelle la fonction membre AddString de la zone de liste déroulante pour ajouter la valeur d'identificateur du cours à partir de l'enregistrement. Enfin, le code définit la sélection de la zone de liste déroulante.

Voir aussi

Concepts

Vues des enregistrements

Liste de pilotes ODBC