セカンド レコードセットを利用してリスト ボックスを表示する方法
更新 : 2007 年 11 月
既定では、レコード ビューは 1 個のレコードセット オブジェクトに関連付けられます。このレコードセット オブジェクトのフィールドはレコード ビューのコントロールに対応付けられます。場合によっては、レコード ビューにリスト ボックス コントロールまたはコンボ ボックス コントロールを配置して、別のレコードセット (セカンド レコードセット) オブジェクトの値を表示する必要があります。ユーザーはレコード ビューに表示する情報のカテゴリをリスト ボックスで選択できます。ここでは、この処理を実行する方法について説明します。
ヒント : |
---|
データ ソースから取り込んだ文字列でコンボ ボックスやリスト ボックスを埋めると、処理が遅くなることがあります。多数のレコードからデータを取り込んでコントロールを埋めるようなデザインは避けてください。 |
ここで使用するモデルでは、メインのレコードセットを使用してフォーム上の各コントロールの値を決定し、セカンド レコードセットを使用してリスト ボックスまたはコンボ ボックスの内容を決定します。また、リスト ボックスから選択した文字列に応じて、メインのレコードセットのクエリを再実行するようにします。次の手順では、コンボ ボックスを使用しますが、リスト ボックスの場合も同じです。
セカンド レコードセットを利用してコンボ ボックスまたはリスト ボックスの内容を表示するには
レコードセット オブジェクト (ODBC の場合は CRecordset、DAO の場合は CDaoRecordset) を作成します。
コンボ ボックス コントロールを表す CComboBox オブジェクトへのポインタを取得します。
コンボ ボックスを空にします。
レコードセットを 1 レコードずつスクロールし、現在のレコードの文字列ごとに 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 の値がコンボ ボックスに加えられます。最後にコンボ ボックスの選択内容を設定します。