Preencher uma caixa de listagem de um segundo conjunto de registros
Por padrão, um modo de exibição do registro está associado um objeto recordset único, cujos campos são mapeados para controles de registro do modo de exibição. Às vezes, deseja colocar uma caixa de listagem ou caixa de combinação do modo de exibição de registros de controle e preenchê-lo com valores de um segundo objeto recordset. O usuário pode usar a caixa de listagem para selecionar uma nova categoria de informações a serem exibidas no modo de exibição do registro. Este tópico explica como e quando fazer isso.
Dica
Lembre-se de que o preenchimento de uma caixa de combinação ou caixa de listagem de uma fonte de dados pode ser lento. Tome precauções contra tentando preencher um controle de um conjunto de registros com um grande número de registros.
O modelo para este tópico consiste em um conjunto de registros primário que preenche os controles do formulário, enquanto um conjunto de registros secundário preenche uma caixa de listagem ou caixa de combinação. Selecting a string from the list box causes your program to requery the primary recordset based on what was selected. The following procedure uses a combo box but applies equally to a list box.
Para preencher uma caixa de combinação ou caixa de lista de um segundo conjunto de registros
Criar o objeto recordset (CRecordset para ODBC, CDaoRecordset para o DAO).
Obter um ponteiro para o CComboBox o objeto para o controle de caixa de combinação.
Esvazie a caixa de combinação de qualquer conteúdo anterior.
Percorrer todos os registros no conjunto de registros chamando CComboBox::AddString para cada seqüência de caracteres do registro atual que você deseja adicionar à caixa de combinação.
Inicialize a seleção na caixa de combinação.
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);
}
Essa função usa um segundo conjunto de registros, m_courseSet, que contém um registro para cada um dos cursos oferecido e um CComboBox o controle, m_ctlCourseList, que é armazenado na classe de registro do modo de exibição.
A função obtém m_courseSet do documento e abre o proprietário. Em seguida, ele esvazia m_ctlCourseList e rola pela m_courseSet. Para cada registro, a função chama a caixa de combinação AddString a função de membro para adicionar o valor de identificação do curso do registro. Finalmente, o código define a combinação da seleção da caixa.