(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; } |