📄 demo_tablelist.cpp
字号:
#include "stdafx.h"
#include "Demo_TableList.h"
CDemo_TableList::CDemo_TableList(CSdbms_Database *pDB/*=NULL*/, CSdbms_Table *pTable/*=NULL*/)
{
m_pDatabase = pDB;
m_pTable = pTable;
}
CDemo_TableList::~CDemo_TableList()
{
}
BEGIN_MESSAGE_MAP(CDemo_TableList, CCJListCtrl)
ON_WM_CREATE()
END_MESSAGE_MAP()
int CDemo_TableList::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CCJListCtrl::OnCreate(lpCreateStruct) == -1)
return -1;
Update();
return 0;
}
void CDemo_TableList::Update()
{
if (m_pTable == NULL)
return;
//删除以前的数据
CHeaderCtrl* pHeader = (CHeaderCtrl*)GetDlgItem(0);
int nColumnCount = pHeader->GetItemCount();
for (int i=0; i<nColumnCount; i++)
VERIFY(DeleteColumn(0));
VERIFY(DeleteAllItems());
//设置表头
UINT nSLSize = m_pTable->m_SecLevel.GetSize();
for (i=0; i<m_pTable->m_FieldArray.GetSize(); i++)
{
AddColumn(m_pTable->m_FieldArray[i]->m_strFieldName);
if (nSLSize != 0)
AddColumn("SecLevel");
}
AutoSizeColumn();
//显示记录值
BYTE *pRecord = m_pTable->GetFirstRecord();
while (pRecord)
{
InsertRecord(pRecord);
pRecord = m_pTable->GetNextRecord();
}
}
void CDemo_TableList::InsertRecord(BYTE *pRecord)
{
char strNull[MAX_RECORD_SIZE];
memset(strNull, NULL_CHAR, MAX_RECORD_SIZE);
int nItem = GetItemCount();
InsertItem(nItem, "");
int nIndex = 0;
for (int i=0, nSubItem=0; i<m_pTable->m_FieldArray.GetSize(); i++)
{
CSdbms_Field *pField = m_pTable->m_FieldArray[i];
CSdbms_Table *pOwnTable = pField->m_pOwnTable;
UINT nSLSize = pOwnTable->m_SecLevel.GetSize();
CString strTemp;
if (memcmp(pRecord+nIndex, strNull, pField->m_nLength+nSLSize) == 0)
{
SetItemText(nItem, nSubItem++, " -- ");
//设置安全级数据
if ((nSLSize > 0) &&
(m_pTable->m_strTableName.CompareNoCase(SYSTEM_TABLE_TEMP) != 0))//memcmp(pRecord+nIndex+pField->m_nLength, strNull, nSLSize) != 0))
SetItemText(nItem, nSubItem++, " -- ");
}
else
{
switch(pField->m_nDataType)
{
case DATATYPE_INT:
case DATATYPE_UINT:
int nValue;
memcpy(&nValue, pRecord+nIndex, pField->m_nLength);
strTemp.Format("%d", nValue);
break;
case DATATYPE_STRING:
char str[MAX_RECORD_SIZE];
memcpy(str, pRecord+nIndex, pField->m_nLength);
str[pField->m_nLength] = '\0';
strTemp = str;
break;
case DATATYPE_BOOL:
BOOL bValue;
memcpy(&bValue, pRecord+nIndex, pField->m_nLength);
strTemp = bValue ? "TRUE" : "FALSE";
break;
case DATATYPE_SECLEVEL:
{
CSdbms_SecurityLevel sl(pRecord+nIndex, pField->m_nLength);
strTemp = sl.GetFormatString(&m_pTable->m_SecLevel);
}
break;
default: ASSERT(FALSE);
}
SetItemText(nItem, nSubItem++, strTemp);
if ((nSLSize > 0) &&
(m_pTable->m_strTableName.CompareNoCase(SYSTEM_TABLE_TEMP) != 0))//memcmp(pRecord+nIndex+pField->m_nLength, strNull, nSLSize) != 0))
{
//读属性的安全级
CSdbms_SecurityLevel slField(pRecord+nIndex+pField->m_nLength, nSLSize);
SetItemText(nItem, nSubItem++, slField.GetFormatString(&m_pTable->m_SecLevel));
}
}
nIndex += (pField->m_nLength + nSLSize);
}
}
void CDemo_TableList::ModifyRecord(BYTE *pRecord)
{
ASSERT(GetItemCount() > 0);
DeleteItem(GetItemCount()-1);
InsertRecord(pRecord);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -