Llenar un cuadro de lista con datos de otro conjunto de registros (acceso a datos MFC)
De manera predeterminada, una vista de registros está asociada con un único objeto de conjunto de registros, cuyos campos se asignan a los controles de la vista de registros. En ocasiones, podría interesarle colocar un cuadro de lista o un control de cuadro combinado en la vista de registros y rellenarlo con valores de otro objeto de conjunto de registros. El usuario puede utilizar el cuadro de lista para seleccionar una nueva categoría de información para que se muestre en la vista de registros. Este tema explica cómo y cuándo hacerlo.
Sugerencia
Tenga en cuenta que el proceso de llenar un cuadro combinado o un cuadro de lista desde un origen de datos puede ser lento.Tome precauciones para evitar llenar un control con un gran número de registros procedentes de un conjunto de registros.
El modelo de este tema consta de un conjunto de registros principal que llena los controles del formulario, y un conjunto de registros secundario que llena un cuadro de lista o un cuadro combinado. El hecho de seleccionar una cadena del cuadro de lista hace que el programa vuelva a consultar el conjunto de registros principal en función de lo que se haya seleccionado. El siguiente procedimiento utiliza un cuadro combinado, pero se aplica igualmente a un cuadro de lista.
Cómo rellenar un cuadro combinado o un cuadro de lista con datos de otro conjunto de registros
Cree el objeto de conjunto de registros (CRecordset para ODBC, CDaoRecordset para DAO).
Obtenga un puntero al objeto CComboBox para el control de cuadro combinado.
Vacíe el cuadro combinado de cualquier contenido anterior.
Desplácese por todos los registros del conjunto de registros, llamando a CComboBox::AddString para cada cadena del registro actual que desee agregar al cuadro combinado.
Inicialice la selección en el cuadro combinado.
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);
}
Esta función utiliza otro conjunto de registros, m_courseSet, que contiene un registro para cada curso ofrecido y un control CComboBox, m_ctlCourseList, que se almacena en la clase de vista de registros.
Esta función obtiene m_courseSet del documento y lo abre. Después, vacía m_ctlCourseList y se desplaza a través de m_courseSet. Para cada registro, la función llama a la función miembro AddString del cuadro combinado para agregar el valor del identificador de curso desde el registro. Por último, el código establece la selección del cuadro combinado.