📄 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 + -