(1) 使用MFC App Wizard(exe)新建一個基於對話框(Dialog based)類型的應用程序,命名為Data_Disp2。
(2) 選擇Project | Add to Project | Components and Controls命令,在彈出的Components and Controls Gallery對話框中選擇Registered ActiveX Controls文件夾,如圖4-12所示。
單擊Insert按鈕,在彈出的Components and Controls Gallery對話框中選擇Microsoft DataGrid Control,Vision6.0(OLEDB)控件,如圖4-13所示。
單擊Insert按鈕,在彈出的Confirm Classes對話框中選擇要添加的子類。如圖4-14所示。單擊OK按鈕後,DataGrid控件就添加到控件工具條上,如圖4-15所示。
至此,DataGrid控件就添加到工程中。
(3) 將DataGrid控件拖入對話框界面,修改其ID為ID_DATAGRID_TEST,如圖4-16所示。
為ID_DATAGRID_TEST添加一個變量,如下所示。
CDataGrid m_dbTest;
(4) 使用Access創建數據庫來存儲數據,數據庫名為DataDisp2.mdb,它包含表BALANCE。在BALANCE表中存儲的是“個人收支情況”的基本信息,其結構及字段說明如表4-4所示。
(5) 在對話框類的頭文件Data_Disp2Dlg.h中添加下面語句。
#import "c:program filescommon filessystemadomsado15.dll" no_namespace
rename("EOF","adoEOF")
在對話框類中添加數據庫連接對象和數據集對象,如下所示。
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
在對話框類中引用DataGrid控件的子類頭文件,如下所示。
#include "Columns.h"
#include "Column.h"
在對話框類的初始化函數中連接數據庫與數據集,將指定數據集綁定到m_dbTest,並設置列寬和列頭,將數據顯示出來。
BOOL CData_Disp2Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
//初始化數據庫連接
m_pConnection.CreateInstance("ADODB.Connection");
//連接數據庫
try
{
//超時檢查
m_pConnection->ConnectionTimeout = 8;
m_pConnection->PutCursorLocation(adUseClIEnt);
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0; Data
Source=DataDisp2.mdb", "", "", adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("數據庫連接失敗!");
return FALSE;
}
try
{
//初始化記錄集對象
m_pRecordset.CreateInstance("ADODB.Recordset");
//打開記錄集
m_pRecordset->Open("SELECT * FROM BALANCE",_variant_t((IDispatch
*)m_pConnection,true), adOpenDynamic, adLockPessimistic, adCmdText);
}
catch(_com_error e)//捕捉異常
{
CString temp;
temp.Format("aaa連接數據庫錯誤信息:%s",e.ErrorMessage());
AfxMessageBox(temp);
return 0;
}
//綁定數據源
m_dbTest.SetRefDataSource(NULL);
m_dbTest.SetRefDataSource((LPUNKNOWN)m_pRecordset);
m_dbTest.SetColumnHeaders(2) ;
//設置列寬與列頭
_variant_t vIndex;
vIndex = long(0);
m_dbTest.GetColumns().GetItem(vIndex).SetWidth(50);
m_dbTest.GetColumns().GetItem(vIndex).SetCaption("姓名");
vIndex = long(1);
m_dbTest.GetColumns().GetItem(vIndex).SetWidth(50);
m_dbTest.GetColumns().GetItem(vIndex).SetCaption("收入");
vIndex = long(2);
m_dbTest.GetColumns().GetItem(vIndex).SetWidth(50);
m_dbTest.GetColumns().GetItem(vIndex).SetCaption("支出");
vIndex = long(3);
m_dbTest.GetColumns().GetItem(vIndex).SetWidth(30);
m_dbTest.GetColumns().GetItem(vIndex).SetCaption("余額");
vIndex = long(4);
m_dbTest.GetColumns().GetItem(vIndex).SetWidth(30);
m_dbTest.GetColumns().GetItem(vIndex).SetCaption("時間");
//顯示更新
m_dbTest.Refresh();
return TRUE;
}
至此就實現用表格顯示數據庫中的數據,但是這個程序的功能很有限,只能顯示數據,不能對表格中的數據進行編輯。接下來介紹幾種常用的表格編輯方法。