日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

06CRecordView类

發布時間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 06CRecordView类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
CRecordView類

CRecordView(記錄視圖)是CFormView的派生類,它提供了一個表單視圖(參見6.4.1)來顯示當前記錄.一個典型的記錄視圖如圖10.3所示,用戶可以通過表單視圖顯示當前記錄.通過記錄視圖,可以修改、添加和刪除數據.用戶一般需要創建一個CRecordView的派生類并在其對應的對話框模板中加入控件.

10.3 典型的記錄視圖

 

記錄視圖使用DDX數據交換機制在表單中的控件和記錄集之間交換數據。在前面介紹的DDX都是在控件和控件父窗口的數據成員之間交換數據,而記錄視圖則是在控件和一個外部對象(CRecordset的派生類對象)之間交換數據.清單10.3顯示了一個CRecordView的派生類的DoDataExchange函數,讀者可以看出,該函數是與m_pSet指針指向的記錄集對象的域數據成員交換數據的,而且,交換數據的代碼是ClassWizard自動加入的.在后面的例子中,將向讀者介紹用ClassWizard連接記錄視圖與記錄集對象的方法.

 

清單10.3 用來與記錄集對象的域數據成員交換數據的DoDataExchange函數

void CSectionForm::DoDataExchange(CDataExchange* pDX)

{

CRecordView::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CSectionForm)

DDX_FieldText(pDX, IDC_COURSE, m_pSet->m_CourseID, m_pSet);

DDX_FieldText(pDX, IDC_SECTION, m_pSet->m_SectionNo, m_pSet);

DDX_FieldText(pDX, IDC_INSTRUCTOR, m_pSet->m_InstructorID, m_pSet);

DDX_FieldText(pDX, IDC_ROOM, m_pSet->m_RoomNo, m_pSet);

DDX_FieldText(pDX, IDC_SCHEDULE, m_pSet->m_Schedule, m_pSet);

DDX_FieldText(pDX, IDC_CAPACITY, m_pSet->m_Capacity, m_pSet);

//}}AFX_DATA_MAP

}

 

作為總結,圖10.4顯示了MFCODBC應用程序中的DDXRFX數據交換.

10.4 DDXRFX數據交換機制

CRecordView本身提供了對下面四個命令的支持:

ID_RECORD_FIRST //滾動到記錄集的第一個記錄

ID_RECORD_LAST //滾動到記錄集的最后一個記錄

ID_RECORD_NEXT //前進一個記錄

ID_RECORD_PREV //后退一個記錄

 

CRecordView提供了OnMove成員函數處理這四個命令消息,OnMove函數對用戶是透明的,清單10.4列出了OnMove的源代碼.

 

清單10.4 OnMove函數

BOOL CRecordView::OnMove(UINT nIDMoveCommand)

{

CRecordset* pSet = OnGetRecordset();

if (pSet->CanUpdate())

{

pSet->Edit();

if (!UpdateData())

return TRUE;

 

pSet->Update();

}

 

switch (nIDMoveCommand)

{

case ID_RECORD_PREV:

pSet->MovePrev();

if (!pSet->IsBOF())

break;

 

case ID_RECORD_FIRST:

pSet->MoveFirst();

break;

 

case ID_RECORD_NEXT:

pSet->MoveNext();

if (!pSet->IsEOF())

break;

if (!pSet->CanScroll())

{

// clear out screen since we're sitting on EOF

pSet->SetFieldNull(NULL);

break;

}

 

case ID_RECORD_LAST:

pSet->MoveLast();

break;

 

default:

// Unexpected case value

ASSERT(FALSE);

}

 

// Show results of move operation

UpdateData(FALSE);

return TRUE;

}

在函數的開頭先調用CRecordset::Edit進入編輯模式,接著調用UpdateData將控件中的數據更新到記錄集對象的域數據成員中,然后調用CRecordset::Update將域數據成員的值寫入數據源.這說明OnMove在滾動記錄的同時會完成對原來記錄的修改.

在函數的中間有一個分支語句用來處理四個不同的命令,在這個分支語句中調用了CRecordset的各種用于滾動記錄的成員函數,這些函數在滾動到一個新的記錄時會把該記錄的內容設置到域數據成員中.在函數的末尾調用UpdateData(FALSE)把新的當前記錄的內容設置到表單的控件中。

由此可見,OnMove一來一回完成了兩次表單控件和數據源的數據交換過程.通過分析該函數,讀者可以學會在瀏覽記錄時如何控制DDXDFX數據交換.

總結

以上是生活随笔為你收集整理的06CRecordView类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。