home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / mfc / database / bindenrl / sectndlg.cpp < prev    next >
C/C++ Source or Header  |  1998-03-26  |  4KB  |  137 lines

  1. // SectnDlg.cpp : implementation file
  2. //
  3. // This is a part of the Microsoft Foundation Classes C++ library.
  4. // Copyright (C) 1992-1998 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Microsoft Foundation Classes Reference and related
  9. // electronic documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Microsoft Foundation Classes product.
  12.  
  13. #include "stdafx.h"
  14. #include "SectnDlg.h"
  15. // #include "dbcombo.h"
  16. #include "msmask.h"
  17.  
  18. #ifdef _DEBUG
  19. #undef THIS_FILE
  20. static char THIS_FILE[] = __FILE__;
  21. #endif
  22.  
  23. /////////////////////////////////////////////////////////////////////////////
  24. // CSectionPage property page
  25.  
  26. // IMPLEMENT_DYNCREATE(CSectionPage, CPropertyPage)
  27.  
  28. #ifdef _DEBUG
  29. #define new DEBUG_NEW
  30. #endif
  31.  
  32. CSectionPage::CSectionPage() : CPropertyPage(CSectionPage::IDD)
  33. {
  34.     m_initiated=FALSE;
  35.     //{{AFX_DATA_INIT(CSectionPage)
  36.     //}}AFX_DATA_INIT
  37. }
  38.  
  39. CSectionPage::~CSectionPage()
  40. {
  41. }
  42.  
  43. void CSectionPage::DoDataExchange(CDataExchange* pDX)
  44. {
  45.     CPropertyPage::DoDataExchange(pDX);
  46.     //{{AFX_DATA_MAP(CSectionPage)
  47.     //}}AFX_DATA_MAP
  48. }
  49.  
  50. BOOL CSectionPage::OnInitDialog()
  51. {
  52.     CPropertyPage::OnInitDialog();
  53.  
  54.     CMSMask* pCourseID = (CMSMask*) GetDlgItem(IDC_COURSE);
  55.     // bind the edit
  56.     if(m_pCourseRDC!=NULL)
  57.         pCourseID->BindDefaultProperty(0x16,VT_BSTR,_T("CourseID"),m_pCourseRDC);
  58.     if(m_pCourseRDC!=NULL)
  59.     {
  60.         m_initiated=TRUE;
  61.         OnCourseChanged();  // adjust the rowset for Course & students
  62.     }
  63.     return TRUE;
  64. }
  65.  
  66. BOOL CSectionPage::OnCourseChanged()
  67. {
  68.     if(m_initiated==FALSE)
  69.         return TRUE;
  70.     TRACE(_T("-----------Course changed for section.\n"));
  71.     CRdc* pSectionRDC = (CRdc*) GetDlgItem(IDC_RDCSECTION);
  72.     CMSMask* pCourseID = (CMSMask*) GetDlgItem(IDC_COURSE);
  73.     ASSERT(pSectionRDC!=NULL && pCourseID!=NULL);
  74.     if(pSectionRDC!=NULL && pCourseID!=NULL)
  75.     {   // change the DataSource and refresh everything
  76.         CString strCourseID=pCourseID->GetText();
  77.         strCourseID=_T("SELECT * from Section WHERE CourseID='")+strCourseID+_T("'");
  78.         pSectionRDC->SetSql(strCourseID);
  79.         pSectionRDC->Refresh();
  80.         return TRUE;
  81.     }
  82.     return FALSE;
  83. }
  84.  
  85. BOOL CSectionPage::OnStudentsChanged()
  86. {
  87.     if(m_initiated==FALSE)
  88.         return TRUE;
  89.     TRACE(_T("----------- Section changed for Students.\n"));
  90.     CRdc* pStudentRDC = (CRdc*) GetDlgItem(IDC_RDCSTUDENT);
  91.     CMSMask* pCourseID = (CMSMask*) GetDlgItem(IDC_COURSE);
  92.     CMSMask* pSection = (CMSMask*) GetDlgItem(IDC_SECTION);
  93.     ASSERT(pStudentRDC!=NULL && pCourseID!=NULL && pSection!=NULL);
  94.     if(pStudentRDC!=NULL && pCourseID!=NULL && pSection!=NULL)
  95.     {   // change the DataSource and refresh everything
  96.         CString strCourseID=pCourseID->GetText();
  97.         CString strSection=pSection->GetText();
  98.         // get the SQL defining the columns
  99.         CString strSQL=_T("SELECT Student.StudentID, Name, GradYear, Grade from Student, Enrollment WHERE Student.StudentID=Enrollment.StudentID");
  100.         // add the search condition to restrain the rowset to active section only
  101.         strCourseID=strSQL+
  102.             _T(" and Enrollment.CourseID='")+strCourseID+_T("'")+
  103.             _T(" and Enrollment.SectionNo='")+strSection+_T("'");
  104.         pStudentRDC->SetSql(strCourseID);
  105.         pStudentRDC->Refresh();
  106.         return TRUE;
  107.     }
  108.     return FALSE;
  109. }
  110.  
  111. BEGIN_MESSAGE_MAP(CSectionPage, CPropertyPage)
  112.     //{{AFX_MSG_MAP(CSectionPage)
  113.     //}}AFX_MSG_MAP
  114. END_MESSAGE_MAP()
  115.  
  116. /////////////////////////////////////////////////////////////////////////////
  117. // CSectionPage event handlers
  118. BEGIN_EVENTSINK_MAP(CSectionPage, CPropertyPage)
  119.     ON_DSCNOTIFY(CSectionPage, IDC_RDCSECTION, OnDSCSectionNotify)
  120. END_EVENTSINK_MAP()
  121.  
  122.  
  123. //////////////////////////////////////////////////////
  124. // This function is called each time the event was fired in IDC_RDCSECTION control
  125. // We use it to adjust STUDENT query parameter in
  126. //
  127. BOOL CSectionPage::OnDSCSectionNotify(DSCSTATE nState, DSCREASON nReason, BOOL* pBool)
  128. {   // Section RDC's state changed
  129.     if(nReason==dscMove && nState==dscDidEvent) // row moved in course cursor
  130.     { // notify the student list
  131.         return OnStudentsChanged(); // pass the event
  132.     }
  133.     return TRUE;    // event handled
  134.  
  135.  
  136. }
  137.