The Microsoft DataGrid is usually seen associated with VB when you start searching for information on how to implement the MS DataGrid in Visual C++. There is not a lot of information out there and therefore many Visual C++ programmers tend not to use this excellent and easy to use database control.
This is a simple implementation that shows you how to use the MS DataGrid control with ADO. The sample has been tested with both MS Access and SQL Server, in theory you should be able to use it against all data sources that support OLE-DB.
You can find information on the
DataGrid control and its properties at MSDN.
MDAC v2.1 or higher (This can be obtained from Microsoft). This contains the OLE DB drivers that are required to hook up to the database or the data source.
A good Knowledge of ADO (ActiveX Data Object) is also required to understand the binding process to the
In order to use the ADO COM object you will need to import the following type libraries, this should be done in your stdafx.h file.
#import msado15.dll #import Oledb32.dll
Please note that you may need to add the full path to these DLLs or you can add the path through your visual C++ environment via:
Adding the DataGrid control to the project
You need to add the
DataGrid control to your project, this is done in the usual way via:
Project->Add to project->Components and Controls
Select the Registered ActiveX Control folder from the dialog and find Microsoft DataGrid Control, Version 6 (OLEDB).
Then press the insert button, the following dialog will appear:
You only need the
CDataGrid class for this sample, therefore check only this class.
Go to the Resource editor, you should see the MS DataGrid Control added to your collection of controls that you can use. The
CDataGrid class will have been generated for you in DataGrid.h and DataGrid.CPP, these files will also have been added to your project.
Bind the DataGrid to a Dialog or Formview
Use the Class Wizard in the normal way to bind the control to a Dialog or Formview. Class wizard will bind the
CDataGrid class with the control.
void CDataGridView::DoDataExchange(CDataExchange* pDX)
DDX_Control(pDX, IDC_DATAGRID1, m_ctlDataGrid);
Bind the DataGrid to ADO
You have to bind the
DataGrid at run-time using an ADO
Recordset. The following code gives you the example used.
void CDataGridView::UpdateGridDetails(const CString& sTableName)
CMainFrame* pMainFrame = reinterpret_cast<CMAINFRAME*>(AfxGetMainWnd());
m_pRS = NULL;
catch (_com_error &e)
m_ctlDataGrid.SetRefDataSource( (LPUNKNOWN) m_pRS );
SetRefDataSource property is used to bind the ADO
Recordset generated to the control. Please note that the type of
Recordset cursor generated determines what can and can not be done in the grid. Example if a forward only cursor is used, then the grid will not allow you to add, edit or delete records via the grid.
Note - The client cursor location needs to be set in order for it to work with MS Access (This is not required in SQL Server).
The MS DataGrid control is straight forward to use as long as you know ADO.