从另一个记录集填充列表框
默认情况下,记录视图与单个记录集对象关联,该记录集的字段被映射到记录视图的控件。 有时需要将列表框或组合框控件放入记录视图,并用另一个记录集对象中的值来填充它。 用户可以使用列表框选择显示在记录视图中的新信息类别。 本主题解释如何和何时这样做。
提示
注意从数据源填充组合框或列表框的速度可能很慢。 采取防范措施来防止尝试从包含大量记录的记录集填充控件。
本主题的模型由填充窗体控件的主记录集组成,而辅助记录集填充列表框或组合框。 从列表框中选择字符串将导致程序基于选定的内容再次查询主记录集。 下面的过程使用组合框,但同样适用于列表框。
从另一个记录集填充组合框或列表框
创建记录集对象(对于 ODBC 为 CRecordset,对于 DAO 为 CDaoRecordset)。
为组合框 (ComboBox) 控件获得指向 CComboBox 对象的指针。
清空任何以前内容的组合框。
在记录集的所有记录中移动,为当前记录中要添加到组合框的每个字符串调用 CComboBox::AddString。
初始化组合框中的选定内容。
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 值。 最后,代码设置组合框的选定内容。