请问,关于BCGGridCtrl使用的有关问题
用派生了的CADOBCGGridCtrlEx,读取数据库数据,其中有一个字段是Bool型的,用CADOBCGGridCtrlEx显示总是出现内存地址错误,主要是在OnAddData函数中ReplaceItem的问题,请大家指教。附上主要代码:
//ADOBCGGridCtrlEx.h:文件
// ADOBCGGridCtrlEx.h: interface for the CADOBCGGridCtrlEx class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_ADOBCGGRIDCTRLEX_H__7A7E2B3A_CFA9_42D8_80BD_1D28A6A9BE51__INCLUDED_)
#define AFX_ADOBCGGRIDCTRLEX_H__7A7E2B3A_CFA9_42D8_80BD_1D28A6A9BE51__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "BCGPADOGridCtrl.h"
#include "BCGPGridRowEx.h"
#define BCGP_ADO_CHECK(x) \
{ \
m_hresLastError = x; \
if (FAILED (m_hresLastError)) \
return FALSE; \
}
#define BCGP_ADO_CHECK_UPDATE(x) \
{ \
m_hresLastError = x; \
if (FAILED (m_hresLastError)) \
{ \
OnItemUpdateFailed(); \
return; \
} \
}
class AFX_EXT_CLASS CADOBCGGridCtrlEx : public CBCGPADOGridCtrl
{
public:
void OnDestory();
CBCGPGridRow* CreateVirtualRow (int nRow);
BOOL CanSortByColumn (int nColumn);
void OnItemUpdateFailed (_com_error& err);
void OnItemUpdateFailed();
void OnADOException (_com_error& err);
void OnItemChanged (CBCGPGridItem* pItem, int nRow, int nColumn);
BOOL OnAddData (CBCGPGridRow* pRow, int nColumn, int nRow);
BOOL OpenSQL (LPCTSTR lpszSQL);
BOOL OpenTable (LPCTSTR lpszTable);
BOOL GetFieldList (CStringList& lstField);
BOOL GetFieldList (LPCTSTR lpszTable, CStringList& lstField);
BOOL GetTableList (CStringList& lstTable);
BOOL Close ();
BOOL OpenMSAccessFile (LPCTSTR lpszFileName,LPCTSTR lpszUserName = _T(""),LPCTSTR lpszPassword = _T(""),LPARAM lOptions = 0);
HRESULT GetLastError () const;
BOOL OpenDB ( LPCTSTR lpszConnectionStr,LPCTSTR lpszUserName = _T(""),LPCTSTR lpszPassword = _T(""),LPARAM lOptions = 0);
CADOBCGGridCtrlEx();
virtual ~CADOBCGGridCtrlEx();
protected:
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordSet;
HRESULT m_hresLastError;
protected:
CString m_strSQL; // Need to be set in derived classes in OpenSQL
BOOL m_bDbSort; // Use 'ORDER BY' for sorting
BOOL m_bIsSorting; // Inside sorting mode
};
#endif // !defined(AFX_ADOBCGGRIDCTRLEX_H__7A7E2B3A_CFA9_42D8_80BD_1D28A6A9BE51__INCLUDED_)
//.cpp
// ADOBCGGridCtrlEx.cpp: implementation of the CADOBCGGridCtrlEx class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "ADOBCGGridCtrlEx.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CADOBCGGridCtrlEx::CADOBCGGridCtrlEx()
{
m_bDbSort = TRUE;
m_bIsSorting = FALSE;
}
CADOBCGGridCtrlEx::~CADOBCGGridCtrlEx()
{
RemoveAll();
}
BOOL CADOBCGGridCtrlEx::OpenDB(LPCTSTR lpszConnectionStr, LPCTSTR lpszUserName, LPCTSTR lpszPassword,LPARAM lOptions)
{
m_hresLastError = S_OK;
try
{
if (m_pConnection == NULL)
{
m_pConnection.CreateInstance (__uuidof (Connection));
}
if (m_pRecordSet == NULL)
{
m_pRecordSet.CreateInstance (__uuidof (Recordset));
}
Close ();
BCGP_ADO_CHECK (m_pConnection->Open (
_bstr_t (lpszConnectionStr),
_bstr_t (lpszUserName),
_bstr_t (lpszPassword),
lOptions == 0 ? adModeUnknown : (long) lOptions));
}
catch (_com_error& err)
{
m_hresLastError = err.Error ();
OnADOException (err);
return FALSE;
}
return TRUE;
}
HRESULT CADOBCGGridCtrlEx::GetLastError() const
{
return m_hresLastError;
}
BOOL CADOBCGGridCtrlEx::OpenMSAccessFile(LPCTSTR lpszFileName, LPCTSTR lpszUserName, LPCTSTR lpszPassword,LPARAM lOptions)
{
ASSERT (lpszFileName != NULL);
CString strConnect;
strConnect.Format (_T("Provider=Microsoft.Jet.OLEDB.4.0; Data Source = %s"),
lpszFileName);
return OpenDB (strConnect, lpszUserName, lpszPassword, lOptions);
}
BOOL CADOBCGGridCtrlEx::Close()
{
m_hresLastError = S_OK;
RemoveAll ();
DeleteAllColumns ();
try
{
if (m_pRecordSet != NULL && m_pRecordSet->GetState () == adStateOpen)
{
BCGP_ADO_CHECK (m_pRecordSet->Close ());
}
if (m_pConnection != NULL && m_pConnection->GetState () == adStateOpen)
{
BCGP_ADO_CHECK (m_pConnection->Close ());
}
}
catch (_com_error& err)
{
m_hresLastError = err.Error ();
OnADOException (err);
return FALSE;
}
return TRUE;
}
BOOL CADOBCGGridCtrlEx::GetTableList(CStringList &lstTable)
{
m_hresLastError = S_OK;
lstTable.RemoveAll ();
try
{
if (m_pConnection == NULL || m_pConnection->GetState () != adStateOpen)
{
ASSERT (FALSE);
return FALSE;
}
_RecordsetPtr rsTables =
m_pConnection->OpenSchema (adSchemaTables);
while (!rsTables->ADOEOF)
{
CString strType =
(LPCTSTR) (_bstr_t) rsTables->Fields->GetItem (TEXT("TABLE_TYPE"))->Value;
if (strType == _T("TABLE"))
{
_bstr_t bstrTableName = rsTables->Fields->GetItem (TEXT("TABLE_NAME"))->Value;
lstTable.AddTail ((LPCTSTR) bstrTableName);
}
BCGP_ADO_CHECK (rsTables->MoveNext ());
}
BCGP_ADO_CHECK (rsTables->Close ());
}
catch (_com_error& err)
{
m_hresLastError = err.Error ();
OnADOException (err);
return FALSE;
}
return TRUE;
}
BOOL CADOBCGGridCtrlEx::GetFieldList(LPCTSTR lpszTable, CStringList &lstField)
{
ASSERT (lpszTable != NULL);
m_hresLastError = S_OK;
CString strSQL = _T("SELECT * FROM ");
strSQL += lpszTable;
lstField.RemoveAll ();
try
{
if (m_pConnection == NULL || m_pConnection->GetState () != adStateOpen)
{
ASSERT (FALSE);
return FALSE;
}
_CommandPtr pCommand;
pCommand.CreateInstance (__uuidof (Command));
pCommand->ActiveConnection = m_pConnection;
pCommand->CommandText = (LPCTSTR) strSQL;
_RecordsetPtr pRecordSet (__uuidof (Recordset));
pRecordSet->CursorLocation = adUseClient;
BCGP_ADO_CHECK (pRecordSet->Open (
(IDispatch*) pCommand, vtMissing,
adOpenStatic, adLockUnspecified,
adCmdUnknown));
for (short i = 0; i < pRecordSet->Fields->Count; i++)
{
lstField.AddTail ((LPCTSTR)
pRecordSet->Fields->GetItem (_variant_t (i))->GetName ());
}
}
catch (_com_error& err)
{
m_hresLastError = err.Error ();
OnADOException (err);
return FALSE;
}
return TRUE;
}
BOOL CADOBCGGridCtrlEx::GetFieldList(CStringList &lstField)
{
lstField.RemoveAll ();
m_hresLastError = S_OK;
try
{
if (m_pRecordSet == NULL)
{
ASSERT (FALSE);
return FALSE;
}
for (short i = 0; i < m_pRecordSet->Fields->Count; i++)
{
lstField.AddTail ((LPCTSTR)
m_pRecordSet->Fields->GetItem (_variant_t (i))->GetName ());
}
}
catch (_com_error& err)
{
m_hresLastError = err.Error ();
OnADOException (err);
return FALSE;
}
return TRUE;
}
BOOL CADOBCGGridCtrlEx::OpenTable(LPCTSTR lpszTable)
{
ASSERT (lpszTable != NULL);
CString strSQL = _T("SELECT * FROM ");
strSQL += lpszTable;
return OpenSQL (strSQL);
}
BOOL CADOBCGGridCtrlEx::OpenSQL(LPCTSTR lpszSQL)
{
ASSERT (lpszSQL != NULL);
m_hresLastError = S_OK;
m_strSQL.Empty ();
RemoveAll ();
if (!m_bIsSorting)
{
DeleteAllColumns ();
}
try
{
if (m_pConnection == NULL || m_pRecordSet == NULL ||
m_pConnection->GetState () != adStateOpen)
{
ASSERT (FALSE);
return FALSE;
}
if (m_pRecordSet->GetState () == adStateOpen)
{
m_pRecordSet->Close ();
}
_CommandPtr pCommand;
pCommand.CreateInstance (__uuidof (Command));
pCommand->ActiveConnection = m_pConnection;
pCommand->CommandText = lpszSQL;
m_pRecordSet->CursorLocation = adUseClient;
BCGP_ADO_CHECK (m_pRecordSet->Open ((
IDispatch*) pCommand, vtMissing,
adOpenStatic, adLockBatchOptimistic,
adCmdUnknown));
int nColumns = 0;
if (!m_bIsSorting)
{
//-------------
// Add columns:
//-------------
CStringList lstField;
if (!GetFieldList (lstField))
{
return FALSE;
}
int nColumn = 0;
for (POSITION pos = lstField.GetHeadPosition (); pos != NULL; nColumn++)
{
InsertColumn (nColumn, lstField.GetNext (pos), 60);
}
nColumns = (int) lstField.GetCount ();
}
else
{
nColumns = GetColumnCount ();
}
if (nColumns == 0)
{
// No columns
AdjustLayout ();
return TRUE;
}
//-------------
// Add records:
//-------------
if (m_pRecordSet->ADOEOF)
{
// The table is empty
AdjustLayout ();
return TRUE;
}
if (m_bVirtualMode)
{
while (!m_pRecordSet->ADOEOF)
{
m_pRecordSet->MoveNext ();
}
SetVirtualRows (max (0, (int)m_pRecordSet->GetRecordCount ()));
}
else
{
for (int nRow = 0; !m_pRecordSet->ADOEOF;
m_pRecordSet->MoveNext (), nRow++)
{
CBCGPGridRow* pRow = (CBCGPGridRowEx*)CreateRow (nColumns);
ASSERT_VALID (pRow);
for (int nColumn = 0; nColumn < nColumns; nColumn++)
{
OnAddData (pRow, nColumn, nRow);
}
if (OnBeforeAddRow (pRow, nRow))
{
AddRow (pRow, FALSE);
}
else
{
delete pRow;
}
}
}
AdjustLayout ();
}
catch (_com_error& err)
{
m_hresLastError = err.Error ();
OnADOException (err);
return FALSE;
}
m_strSQL = lpszSQL;
return TRUE;
}
BOOL CADOBCGGridCtrlEx::OnAddData(CBCGPGridRow *pRow, int nColumn, int nRow)
{
ASSERT_VALID (pRow);
ASSERT (m_pRecordSet != NULL);
ASSERT (m_pRecordSet->GetState () == adStateOpen);
ASSERT (!m_pRecordSet->ADOEOF);
m_hresLastError = S_OK;
try
{
_variant_t varValue =
m_pRecordSet->Fields->GetItem (_variant_t ((short) nColumn))->GetValue ();
switch (varValue.vt)
{
case VT_DATE:
pRow->ReplaceItem (nColumn, new CBCGPGridDateTimeItem ((DATE) varValue), FALSE, TRUE);
break;
case VT_BOOL:
pRow->ReplaceItem (nColumn, new CBCGPGridCheckItem((bool) varValue), FALSE, TRUE);
// if(varValue.vt == VT_BOOL)
// {
// CString str;
// if((bool)varValue == TRUE)
// {
// str = "1";
// pRow->GetItem (nColumn)->SetValue ((_variant_t)str, FALSE);
// }
// else
// { str ="0";
// pRow->GetItem(nColumn)->SetValue((_variant_t)str,FALSE);
// }
// }
break;
case VT_NULL:
case VT_EMPTY:
//--------------------------------------------------------------
// Check the field type: if it's a string, pass an empty string:
//--------------------------------------------------------------
switch (m_pRecordSet->Fields->GetItem (
_variant_t ((short) nColumn))->GetType ())
{
case adVarChar:
case adLongVarChar:
case adWChar:
case adVarWChar:
case adLongVarWChar:
{
pRow->GetItem (nColumn)->SetValue (_T(""), FALSE);
}
}
break;
case VT_BSTR:
{
CString str = (LPCTSTR)(_bstr_t) varValue;
CString strTextToDisplay;
CString strURL;
if (ParseURLString (str, strTextToDisplay, strURL))
{
pRow->ReplaceItem (nColumn, new CBCGPGridURLItem (strTextToDisplay, strURL), FALSE, TRUE);
break;
}
}
default:
pRow->GetItem (nColumn)->SetValue (varValue, FALSE);
}
}
catch (CMemoryException* pEx)
{
pEx->ReportError ();
pEx->Delete ();
}
catch (_com_error& err)
{
MessageBox (err.ErrorMessage ());
}
return TRUE;
}
void CADOBCGGridCtrlEx::OnItemChanged(CBCGPGridItem *pItem, int nRow, int nColumn)
{
m_hresLastError = S_OK;
try
{
ASSERT_VALID (this);
if (m_pRecordSet == NULL)
{
ASSERT (FALSE);
return;
}
ASSERT_VALID (pItem);
CBCGPGridRow* pRow = pItem->GetParentRow ();
if (pRow == NULL)
{
return;
}
ASSERT_VALID (pRow);
BCGP_ADO_CHECK_UPDATE (m_pRecordSet->MoveFirst ());
BCGP_ADO_CHECK_UPDATE (m_pRecordSet->Move (nRow));
CString strURL;
if (BuildURL (pItem, strURL))
{
m_pRecordSet->Fields->GetItem (_variant_t ((short) nColumn))->Value =
(LPCTSTR) strURL;
}
else
{
m_pRecordSet->Fields->GetItem (_variant_t ((short) nColumn))->Value =
pItem->GetValue ();
}
BCGP_ADO_CHECK_UPDATE (m_pRecordSet->Update ());
BCGP_ADO_CHECK_UPDATE (m_pRecordSet->UpdateBatch (adAffectAll));
}
catch (_com_error& err)
{
m_hresLastError = err.Error ();
OnItemUpdateFailed (err);
}
}
void CADOBCGGridCtrlEx::OnADOException(_com_error &err)
{
AfxMessageBox (err.ErrorMessage ());
}
void CADOBCGGridCtrlEx::OnItemUpdateFailed()
{
_com_error err (m_hresLastError);
OnItemUpdateFailed (err);
}
void CADOBCGGridCtrlEx::OnItemUpdateFailed(_com_error &err)
{
AfxMessageBox (err.ErrorMessage ());
CBCGPDBGridCtrl::OnItemUpdateFailed ();
}
BOOL CADOBCGGridCtrlEx::CanSortByColumn(int nColumn)
{
m_hresLastError = S_OK;
try
{
if (m_pRecordSet == NULL)
{
ASSERT (FALSE);
return FALSE;
}
switch (m_pRecordSet->Fields->GetItem (
_variant_t ((short) nColumn))->GetType ())
{
case adTinyInt:
case adSmallInt:
case adInteger:
case adBigInt:
case adUnsignedTinyInt:
case adUnsignedSmallInt:
case adUnsignedInt:
case adUnsignedBigInt:
case adSingle:
case adDouble:
case adCurrency:
case adDecimal:
case adNumeric:
case adBoolean:
case adDate:
case adDBDate:
case adDBTime:
case adDBTimeStamp:
case adBSTR:
case adChar:
case adVarChar:
case adLongVarChar:
case adWChar:
case adVarWChar:
case adLongVarWChar:
return TRUE;
}
}
catch (_com_error& err)
{
m_hresLastError = err.Error ();
OnADOException (err);
}
return FALSE;
}
CBCGPGridRow* CADOBCGGridCtrlEx::CreateVirtualRow(int nRow)
{
CBCGPGridRow* pRow = (CBCGPGridRow*)CBCGPGridCtrl::CreateVirtualRow (nRow);
if (pRow == NULL)
{
return NULL;
}
if (m_pRecordSet == NULL)
{
ASSERT (FALSE);
return NULL;
}
try
{
m_pRecordSet->MoveFirst ();
m_pRecordSet->Move (nRow);
for (int nCol = 0; nCol < GetColumnCount (); nCol++)
{
OnAddData (pRow, nCol, nRow);
}
}
catch (_com_error& err)
{
m_hresLastError = err.Error ();
OnADOException (err);
}
return pRow;
}
void CADOBCGGridCtrlEx::OnDestory()
{
CBCGPGridCtrl::OnDestroy();
}
//对话框调用显示
#include "stdafx.h"
#include "大.h"
#include "TestADOGRID.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTestADOGRID dialog
CTestADOGRID::CTestADOGRID(CWnd* pParent /*=NULL*/)
: CDialog(CTestADOGRID::IDD, pParent)
{
//{{AFX_DATA_INIT(CTestADOGRID)
//}}AFX_DATA_INIT
}
void CTestADOGRID::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTestADOGRID)
DDX_Control(pDX, IDC_ADO_GRID, m_pStatic);
DDX_Control(pDX, IDC_ADO_GRID,m_adoGridCtrl);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTestADOGRID, CDialog)
//{{AFX_MSG_MAP(CTestADOGRID)
ON_WM_SIZE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTestADOGRID message handlers
BOOL CTestADOGRID::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
CreateADOGrid(IDC_ADO_GRID);
ShowGrid("基础数据表");
// CBCGPGridRow* pRow = m_adoGridCtrl.CreateNewRow ();
// ASSERT_VALID (pRow);
//
// pRow->GetItem (1)->SetValue (_T("CheckBox:"));
// pRow->ReplaceItem (1, new CBCGPGridCheckItem (TRUE));
// pRow->GetItem (2)->SetValue (_T("CheckBox + Label:"));
// CBCGPGridCheckItem* pCheckItem = new CBCGPGridCheckItem (TRUE);
// pCheckItem->SetLabel(_T("Label"));
// pRow->ReplaceItem (2, pCheckItem);
// m_adoGridCtrl.AddRow (pRow, FALSE);
// m_adoGridCtrl.AdjustLayout ();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CTestADOGRID::CreateADOGrid(UINT nGridID)
{
if (!m_adoGridCtrl.Create ( NULL,
CRect (0, 0, 50, 50), this, nGridID))
{
TRACE0("CBCGPGridView::OnCreate: cannot create grid control\n");
return FALSE;
}
CRect rc;
GetClientRect (&rc);
if (m_adoGridCtrl.GetSafeHwnd () != NULL)
{
m_adoGridCtrl.SetWindowPos (NULL, -1, -1, rc.Width (), rc.Height (),
SWP_NOZORDER | SWP_NOMOVE | SWP_NOACTIVATE);
}
// m_adoGridCtrl.SetDbSort();
CRect rect;
m_pStatic.GetWindowRect (&rect);
ScreenToClient(rect);
m_adoGridCtrl.ShowWindow(SW_SHOW);
m_adoGridCtrl.MoveWindow(&rect);
m_pStatic.ShowWindow(SW_HIDE);
m_adoGridCtrl.EnableVirtualMode();
return TRUE;
}
void CTestADOGRID::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
}
BOOL CTestADOGRID::ShowGrid(CString strTabName)
{
if (strTabName.IsEmpty())
return FALSE;
// CString strDBName = "GWCInfo";
// CString strHost ="(local)";
// CString strConnect;
// strConnect.Format("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=%s;Data Source=%s",
// strDBName, strHost);
// m_adoGridCtrl.OpenDB(strConnect,_T(""), _T(""),FALSE);
// CString strSQL;
// strSQL.Format("select * from %s", strTabName);
// m_adoGridCtrl.OpenSQL(strSQL);
//
// CString colName = m_adoGridCtrl.GetColumnName(0);
// m_adoGridCtrl.SetColumnWidth(0, 60);
// m_adoGridCtrl.SetColumnWidth(1,60);
// m_adoGridCtrl.SetColumnWidth(2,60);
// m_adoGridCtrl.SetDbSort(TRUE);
CString strSQL = "select * from 地下水质量与污染层级阶梯评价标准";
if (strSQL.IsEmpty())
return FALSE;
//读取评价标准
CString m_strMdbName = "E:\\temp\\大\\Data\\update.apk"; //评价标准数据库连接
CString m_strMdbConnect;
m_strMdbConnect.Format( "Provider='Microsoft.JET.OLEDB.4.0';Data source = %s", m_strMdbName);
if (m_adoGridCtrl.OpenDB(m_strMdbConnect,_T(""), _T(""),FALSE) == FALSE)//连接数据库失败
return FALSE;
if (m_adoGridCtrl.OpenSQL(strSQL) == FALSE)//打开数据集失败
return FALSE;
CString colName = m_adoGridCtrl.GetColumnName(0);
m_adoGridCtrl.SetColumnWidth(0, 60);
m_adoGridCtrl.SetColumnWidth(1,60);
m_adoGridCtrl.SetColumnWidth(2,60);
m_adoGridCtrl.AdjustLayout();
return FALSE;
}
#include "stdafx.h"
#include "大.h"
#include "TestADOGRID.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTestADOGRID dialog
CTestADOGRID::CTestADOGRID(CWnd* pParent /*=NULL*/)
: CDialog(CTestADOGRID::IDD, pParent)
{
//{{AFX_DATA_INIT(CTestADOGRID)
//}}AFX_DATA_INIT
}
void CTestADOGRID::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTestADOGRID)
DDX_Control(pDX, IDC_ADO_GRID, m_pStatic);
DDX_Control(pDX, IDC_ADO_GRID,m_adoGridCtrl);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTestADOGRID, CDialog)
//{{AFX_MSG_MAP(CTestADOGRID)
ON_WM_SIZE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTestADOGRID message handlers
BOOL CTestADOGRID::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
CreateADOGrid(IDC_ADO_GRID);
ShowGrid("基础数据表");
// CBCGPGridRow* pRow = m_adoGridCtrl.CreateNewRow ();
// ASSERT_VALID (pRow);
//
// pRow->GetItem (1)->SetValue (_T("CheckBox:"));
// pRow->ReplaceItem (1, new CBCGPGridCheckItem (TRUE));
// pRow->GetItem (2)->SetValue (_T("CheckBox + Label:"));
// CBCGPGridCheckItem* pCheckItem = new CBCGPGridCheckItem (TRUE);
// pCheckItem->SetLabel(_T("Label"));
// pRow->ReplaceItem (2, pCheckItem);
// m_adoGridCtrl.AddRow (pRow, FALSE);
// m_adoGridCtrl.AdjustLayout ();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CTestADOGRID::CreateADOGrid(UINT nGridID)
{
if (!m_adoGridCtrl.Create ( NULL,
CRect (0, 0, 50, 50), this, nGridID))
{
TRACE0("CBCGPGridView::OnCreate: cannot create grid control\n");
return FALSE;
}
CRect rc;
GetClientRect (&rc);
if (m_adoGridCtrl.GetSafeHwnd () != NULL)
{
m_adoGridCtrl.SetWindowPos (NULL, -1, -1, rc.Width (), rc.Height (),
SWP_NOZORDER | SWP_NOMOVE | SWP_NOACTIVATE);
}
// m_adoGridCtrl.SetDbSort();
CRect rect;
m_pStatic.GetWindowRect (&rect);
ScreenToClient(rect);
m_adoGridCtrl.ShowWindow(SW_SHOW);
m_adoGridCtrl.MoveWindow(&rect);
m_pStatic.ShowWindow(SW_HIDE);
m_adoGridCtrl.EnableVirtualMode();
return TRUE;
}
void CTestADOGRID::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
}
BOOL CTestADOGRID::ShowGrid(CString strTabName)
{
if (strTabName.IsEmpty())
return FALSE;
// CString strDBName = "GWCInfo";
// CString strHost ="(local)";
// CString strConnect;
// strConnect.Format("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=%s;Data Source=%s",
// strDBName, strHost);
// m_adoGridCtrl.OpenDB(strConnect,_T(""), _T(""),FALSE);
// CString strSQL;
// strSQL.Format("select * from %s", strTabName);
// m_adoGridCtrl.OpenSQL(strSQL);
//
// CString colName = m_adoGridCtrl.GetColumnName(0);
// m_adoGridCtrl.SetColumnWidth(0, 60);
// m_adoGridCtrl.SetColumnWidth(1,60);
// m_adoGridCtrl.SetColumnWidth(2,60);
// m_adoGridCtrl.SetDbSort(TRUE);
CString strSQL = "select * from 地下水质量与污染层级阶梯评价标准";
if (strSQL.IsEmpty())
return FALSE;
//读取评价标准
CString m_strMdbName = "E:\\temp\\大\\Data\\update.apk"; //评价标准数据库连接
CString m_strMdbConnect;
m_strMdbConnect.Format( "Provider='Microsoft.JET.OLEDB.4.0';Data source = %s", m_strMdbName);
if (m_adoGridCtrl.OpenDB(m_strMdbConnect,_T(""), _T(""),FALSE) == FALSE)//连接数据库失败
return FALSE;
if (m_adoGridCtrl.OpenSQL(strSQL) == FALSE)//打开数据集失败
return FALSE;
CString colName = m_adoGridCtrl.GetColumnName(0);
m_adoGridCtrl.SetColumnWidth(0, 60);
m_adoGridCtrl.SetColumnWidth(1,60);
m_adoGridCtrl.SetColumnWidth(2,60);
m_adoGridCtrl.AdjustLayout();
return FALSE;
}