⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbgrid.cpp

📁 ADO -- 派生一个 DBGrid 控件
💻 CPP
字号:
// DBGrid.cpp : implementation file
//

#include "stdafx.h"
#include "DBGrid.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// DBGrid

DBGrid::DBGrid()
{
}

DBGrid::~DBGrid()
{
}

bool DBGrid::SetRecordset(_RecordsetPtr set)
{
	// 初始化列表视图
	InitCtrlList();

	// 根据记录集字段数目插入相应的列
	CString sFieldName;
	for (int i=0; i<set->GetFields()->GetCount(); i++)
	{
		sFieldName = (char*)(_bstr_t)(set->GetFields()->GetItem((long)i)->GetName());
		this->InsertColumn(i, sFieldName);
	}

	i = 0;
	set->MoveFirst();
	while(!set->EndOfFile)	// 循环插入每一行(一行一条记录)
	{
		this->InsertItem(i, "");
		for (int j=0; j<set->GetFields()->GetCount(); j++)	// 循环设置每一行的每个字段值
		{
			// 先获取字段名称
			sFieldName = (char*)(_bstr_t)(set->GetFields()->GetItem((long)j)->GetName());

			// 再根据字段名称获取字段值	
			_variant_t  Holder;
			Holder = set->GetCollect((_bstr_t)sFieldName);
			CString str = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
			this->SetItemText(i,j, str);

			// 注:
			// 如果不先将结果保存至 _variant_t 对象有可能会使程序挂掉
			// 因为有些对象是不能直接转换为 (char*)(_bstr_t) 的,但是 _variant_t
			// 可以将所有对象转化为 (char*)(_bstr_t),所以先将结果保存至 _variant_t
		}
		i++;
		set->MoveNext();
	}

	// 自动调整各列的宽度
	for (i=0; i<set->GetFields()->GetCount(); i++)
	{
		this->SetColumnWidth(i, LVSCW_AUTOSIZE_USEHEADER );
	}

	return true;
}

bool DBGrid::InitCtrlList()
{
	// Set Color
	this->SetBkColor(RGB(177, 151, 240));
	this->SetTextColor(RGB(0,0,0));
	this->SetTextBkColor(RGB(177, 151, 240));

	// Set EX-Style
	this->SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP);

	// 删除所有行
	this->DeleteAllItems();

	// 删除所有列
	LVCOLUMN column;
	while(this->GetColumn(0, &column))
	{
		this->DeleteColumn(0);
	}

	return true;
}

BEGIN_MESSAGE_MAP(DBGrid, CListCtrl)
	//{{AFX_MSG_MAP(DBGrid)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// DBGrid message handlers

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -