Füllen eines Listenfelds aus einem zweiten Recordset
Aktualisiert: November 2007
Eine Datensatzansicht ist standardmäßig mit einem einzelnen Recordset-Objekt verknüpft, dessen Felder den Steuerelementen der Datensatzansicht zugeordnet sind. Gelegentlich werden Sie ein Listen- oder Kombinationsfeld-Steuerelement in die Datensatzansicht aufnehmen und es mit den Werten aus einem zweiten Recordset-Objekt füllen. Der Benutzer kann mithilfe des Listenfelds eine neue Informationskategorie auswählen, die in der Datensatzansicht angezeigt werden soll. In diesem Thema wird beschrieben, wie und wann Sie so verfahren.
Tipp: |
---|
Bedenken Sie, dass das Füllen eines Listen- oder Kombinationsfelds aus einer Datenquelle einige Zeit dauern kann. Sie sollten möglichst verhindern, dass ein Steuerelement aus einem Recordset mit einer großen Menge von Datensätzen gefüllt wird. |
Das für dieses Thema gewählte Modell besteht aus einem primären Recordset, durch das die Steuerelemente des Formulars gefüllt werden, und einem sekundären Recordset, durch das ein Listen- oder Kombinationsfeld gefüllt wird. Die Auswahl einer Zeichenfolge im Listenfeld veranlasst das Programm, das primäre Recordset auf der Basis dieser Auswahl erneut abzufragen. Im folgenden Verfahren wird zwar ein Kombinationsfeld verwendet, es ist jedoch auch auf ein Listenfeld anwendbar.
So füllen Sie ein Kombinations- oder Listenfeld aus einem zweiten Recordset
Erstellen Sie das Recordset-Objekt (CRecordset für ODBC, CDaoRecordset für DAO).
Rufen Sie einen Zeiger auf das CComboBox-Objekt für das Kombinationsfeld-Steuerelement ab.
Entfernen Sie mögliche Inhalte aus dem Kombinationsfeld.
Navigieren Sie durch alle Datensätze im Recordset, und rufen Sie für jede Zeichenfolge des aktuellen Datensatzes, die in das Kombinationsfeld eingefügt werden soll, CComboBox::AddString auf.
Initialisieren Sie die Auswahl im Kombinationsfeld.
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);
}
In dieser Funktion wird das zweite Recordset m_courseSet verwendet, das für jede angebotene Vorlesung einen Datensatz enthält, sowie das CComboBox-Steuerelement m_ctlCourseList, das in der Datensatzansichts-Klasse gespeichert ist.
Die Funktion ruft m_courseSet aus dem Dokument ab und öffnet es. Anschließend leert sie m_ctlCourseList und scrollt durch m_courseSet. Die Funktion ruft für jeden Datensatz die Memberfunktion AddString des Kombinationsfelds auf, um die Vorlesungs-ID aus dem Datensatz hinzuzufügen. Schließlich wird die Auswahl des Kombinationsfelds durch den Code festgelegt.