📄 beamdatamanagerview.cpp
字号:
// BeamDataManagerView.cpp : implementation of the CBeamDataManagerView class
//
#include "stdafx.h"
#include "BeamDataManager.h"
#include "BeamDataManagerDoc.h"
#include "BeamDataManagerView.h"
#include "DataExchangeFunDefine.h"
#include "BrushChildTableFunction.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CBeamDataManagerView
IMPLEMENT_DYNCREATE(CBeamDataManagerView, CFormView)
BEGIN_MESSAGE_MAP(CBeamDataManagerView, CFormView)
//{{AFX_MSG_MAP(CBeamDataManagerView)
ON_NOTIFY(NM_CLICK, IDC_BEAMDATALIST, OnClickBeamdatalist)
ON_NOTIFY(NM_DBLCLK, IDC_BEAMDATALIST, OnDblclkBeamdatalist)
ON_WM_PAINT()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CBeamDataManagerView construction/destruction
CBeamDataManagerView::CBeamDataManagerView()
: CFormView(CBeamDataManagerView::IDD)
{
// TODO: add construction code here
m_TableName="\0";
}
CBeamDataManagerView::~CBeamDataManagerView()
{
}
void CBeamDataManagerView::DoDataExchange(CDataExchange* pDX)
{
// TODO: Add your specialized code here and/or call the base class
DDX_Control(pDX, IDC_BEAMDATALIST, m_basedatalist);
CFormView::DoDataExchange(pDX);
}
BOOL CBeamDataManagerView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CFormView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CBeamDataManagerView drawing
void CBeamDataManagerView::OnDraw(CDC* pDC)
{
CBeamDataManagerDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
pDC->TextOut(20,2,m_TableName);
}
/////////////////////////////////////////////////////////////////////////////
// CBeamDataManagerView printing
BOOL CBeamDataManagerView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CBeamDataManagerView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CBeamDataManagerView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CBeamDataManagerView diagnostics
#ifdef _DEBUG
void CBeamDataManagerView::AssertValid() const
{
CFormView::AssertValid();
}
void CBeamDataManagerView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
CBeamDataManagerDoc* CBeamDataManagerView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CBeamDataManagerDoc)));
return (CBeamDataManagerDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CBeamDataManagerView message handlers
void CBeamDataManagerView::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
RECT rect;
GetClientRect(&rect);
m_basedatalist.SetWindowPos(&wndTop,0,20,
rect.right-rect.left,
rect.bottom-rect.top-20,
SWP_SHOWWINDOW);
OnDraw(&dc);
// Do not call CFormView::OnPaint() for painting messages
}
void CBeamDataManagerView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
DrawList();
ReadtoList();
}
void CBeamDataManagerView::DrawList()
{
RECT rect;
GetClientRect(&rect);
m_basedatalist.SetBkColor(RGB(180,180,180));
m_basedatalist.SetTextBkColor(RGB(100,140,140));
m_basedatalist.SetTextColor(RGB(250,250,250));
DWORD dwStyle;
dwStyle = m_basedatalist.GetStyle();
dwStyle |= LVS_EX_GRIDLINES |LVS_EX_FULLROWSELECT|LVS_SHOWSELALWAYS ;
m_basedatalist.SetExtendedStyle(dwStyle);
m_basedatalist.GetClientRect(&rect);
LV_COLUMN lvc;
lvc.mask = LVCF_TEXT | LVCF_SUBITEM | LVCF_WIDTH |LVCF_FMT;
lvc.fmt=LVCFMT_CENTER;
if(m_TableName=="-"||m_TableName=="\0"){
m_TableName="\0";
lvc.pszText="\0";
lvc.cx=50;
m_basedatalist.DeleteColumn(0);
m_basedatalist.InsertColumn(0,&lvc);
return;
}
CString sql="SELECT * FROM "+m_TableName;
CBeamDataManagerApp *ptheApp=((CBeamDataManagerApp*)AfxGetApp());
try
{
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)ptheApp->m_pConnection,true),
adOpenStatic,adLockOptimistic,adCmdText);
m_fieldscount=m_pRecordset->GetFields()->GetCount();
m_listcolumnscount=m_fieldscount;
FieldPtr ptr;
CString fieldname;
for(long i=0;i<m_fieldscount;i++){
ptr=m_pRecordset->GetFields()->GetItem(i);
fieldname= (LPCTSTR)(_bstr_t)ptr->Name;
if(fieldname=="ChildTableViewLocation") m_listcolumnscount--;
if(fieldname=="ChildTableName") m_listcolumnscount--;
if(fieldname=="DataExchangeFunction") m_listcolumnscount--;
if(fieldname=="BrushChildTableFunction") m_listcolumnscount--;
//检索是否有以上三个字段,以扣去不画到网格中
}
for(i=0;i<m_listcolumnscount;i++){
ptr=m_pRecordset->GetFields()->GetItem(i);
lvc.iSubItem = i;
fieldname= (LPCTSTR)(_bstr_t)ptr->Name;
lvc.pszText=fieldname.GetBuffer(fieldname.GetLength());
lvc.cx = fieldname.GetLength()*11;
m_basedatalist.DeleteColumn(i);
m_basedatalist.InsertColumn(i,&lvc);
}
}
catch(_com_error e)///捕捉异常
{
CString temp;
temp.Format("连接数据库错误信息:%s",e.ErrorMessage());
AfxMessageBox(temp);
return;
}
if(m_pRecordset->State)
m_pRecordset->Close();
m_pRecordset.Release();
}
void CBeamDataManagerView::ReadtoList()
{
//删除所有list中的数据。
m_basedatalist.DeleteAllItems();
if(m_TableName=="-"||m_TableName=="\0")
return;
CString sql="SELECT * FROM "+m_TableName;
FieldPtr ptr;
CString fieldname;
LPSTR fieldText;
int numline=0;
try
{
CBeamDataManagerApp *ptheApp=((CBeamDataManagerApp*)AfxGetApp());
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)ptheApp->m_pConnection,true),
adOpenStatic,adLockOptimistic,adCmdText);
if(m_pRecordset->adoEOF)
{
AfxMessageBox("数据库表中没有记录信息!");
}
else
{
LV_ITEM lvitem;
lvitem.mask=LVIF_TEXT ;
lvitem.pszText="";
lvitem.iSubItem=0;
while(!m_pRecordset->adoEOF)
{
lvitem.iItem=numline;
m_basedatalist.InsertItem(&lvitem);
//读出数据写入到list中
for(long i=0;i<m_listcolumnscount;i++){
ptr=m_pRecordset->GetFields()->GetItem(i);
fieldname= (LPCTSTR)(_bstr_t)ptr->Name;
fieldText=fieldname.GetBuffer(fieldname.GetLength());
m_basedatalist.SetItemText(numline,i,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect(fieldText));
}
numline++;
m_pRecordset->MoveNext();
}
}
}
catch(_com_error e)///捕捉异常
{
CString temp;
temp.Format("连接数据库错误信息:%s",e.ErrorMessage());
AfxMessageBox(temp);
return;
}
if(m_pRecordset->State)
m_pRecordset->Close();
m_pRecordset.Release();
}
void CBeamDataManagerView::OnClickBeamdatalist(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
POSITION pos = m_basedatalist.GetFirstSelectedItemPosition();
//如果选中一行
if(pos)
{
CString sql="SELECT * FROM "+m_TableName;
try
{
CBeamDataManagerApp *ptheApp=((CBeamDataManagerApp*)AfxGetApp());
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)ptheApp->m_pConnection,true),
adOpenStatic,adLockOptimistic,adCmdText);
if(m_pRecordset->adoEOF)
{
AfxMessageBox("数据库表中没有记录信息!");
}
else
{
int nItem = m_basedatalist.GetNextSelectedItem(pos);
for(long i=0;i<nItem;i++)
m_pRecordset->MoveNext();
FieldPtr ptr;
CString fieldname;
for(i=0;i<m_fieldscount;i++){
ptr=m_pRecordset->GetFields()->GetItem(i);
fieldname= (LPCTSTR)(_bstr_t)ptr->Name;
if(fieldname=="BrushChildTableFunction") break;//检索是否有BrushChildTableFunction字段
}
if(fieldname!="BrushChildTableFunction") return;
CString str1=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("BrushChildTableFunction");
CString str2;
BrushChildTableFunction BrushChildTable;
for(i=0;i<dim(_BrushChildTableMapEntries);i++){
str2.Format("%s",_BrushChildTableMapEntries[i].functionname);
if(str2==str1)
(BrushChildTable.*(_BrushChildTableMapEntries[i].pfn))(m_pRecordset,m_basedatalist);
}
for(i=0;i<m_fieldscount;i++){
ptr=m_pRecordset->GetFields()->GetItem(i);
fieldname= (LPCTSTR)(_bstr_t)ptr->Name;
if(fieldname=="ChildTableViewLocation") break;//检索是否有ChildTableViewLocation字段
}
if(fieldname!="ChildTableViewLocation") return;
CString childviewlocation=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("ChildTableViewLocation");
//子表要显示的视口位置
for(i=0;i<m_fieldscount;i++){
ptr=m_pRecordset->GetFields()->GetItem(i);
fieldname= (LPCTSTR)(_bstr_t)ptr->Name;
if(fieldname=="ChildTableName") break;//检索是否有ChildTableName字段
}
if(fieldname!="ChildTableName") return;
CString TableName=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("ChildTableName");
//子表名
if(m_pRecordset->State)
m_pRecordset->Close();//必须要,因为当下句如果是删除自身的话,就须先关闭该记录再删除自身视窗
//如果子表要显示的视口与本表是同一视口会碰到这一问题
CWnd *pMainWnd=AfxGetApp()->GetMainWnd();
pMainWnd->SendMessage(WM_USER+50,
(WPARAM)childviewlocation.GetBuffer(childviewlocation.GetLength()),
(LPARAM)TableName.GetBuffer(TableName.GetLength()));
//该句作为该控件单击事件的统一行为,不管是击于哪一条记录,都是根据是否有子表记录及视口记录信息单纯地
//显示子表,但是对于子表的内容无法修改调整,对于子表的内容与本记录值某参数有相关的子表内容,无法实现
//对其的调整修改,因为由于不同的记录,信息内涵属性不同,与对应的子表的数据关系不同,无法在此处编写统一
//的代码实现不同的记录对不同的子表的数据关联修改特性
//除非在这里用一个统一的类对象,通过虚函数机制自动实现不同的关联性,就是要编类库机制,还是要用类的机制
//用映射机制也可以
}
}
catch(_com_error e)///捕捉异常
{
CString temp;
temp.Format("连接数据库错误信息:%s",e.ErrorMessage());
AfxMessageBox(temp);
return;
}
if(m_pRecordset->State)
m_pRecordset->Close();
m_pRecordset.Release();
}
*pResult = 0;
}
void CBeamDataManagerView::OnDblclkBeamdatalist(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
POSITION pos = m_basedatalist.GetFirstSelectedItemPosition();
//如果选中一行
if(pos)
{
CString sql="SELECT * FROM "+m_TableName;
try
{
CBeamDataManagerApp *ptheApp=((CBeamDataManagerApp*)AfxGetApp());
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)ptheApp->m_pConnection,true),
adOpenStatic,adLockOptimistic,adCmdText);
if(m_pRecordset->adoEOF)
{
AfxMessageBox("数据库表中没有记录信息!");
}
else
{
int nItem = m_basedatalist.GetNextSelectedItem(pos);
for(int i=0;i<nItem;i++)
m_pRecordset->MoveNext();
// FieldPtr ptr=m_pRecordset->GetFields()->GetItem(m_fieldscount-(long)3);
// CString fieldname= (LPCTSTR)(_bstr_t)ptr->Name;
// LPSTR fieldText=fieldname.GetBuffer(fieldname.GetLength());
// CString str1=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect(fieldText);
FieldPtr ptr;
CString fieldname;
for(i=0;i<(int)m_fieldscount;i++){
ptr=m_pRecordset->GetFields()->GetItem((long)i);
fieldname= (LPCTSTR)(_bstr_t)ptr->Name;
if(fieldname=="DataExchangeFunction") break;//检索是否有DataExchangeFunction字段
}
if(fieldname!="DataExchangeFunction") return;
CString str1=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("DataExchangeFunction");
CString str2;
DataExchangeFunction dataExchange;
for(i=0;i<dim(_structExchangeMapEntries);i++){
str2.Format("%s",_structExchangeMapEntries[i].functionname);
if(str2==str1)
(dataExchange.*(_structExchangeMapEntries[i].pfn))(m_pRecordset,m_basedatalist);
}
}
}
catch(_com_error e)///捕捉异常
{
CString temp;
temp.Format("连接数据库错误信息:%s",e.ErrorMessage());
AfxMessageBox(temp);
return;
}
if(m_pRecordset->State)
m_pRecordset->Close();
m_pRecordset.Release();
}
*pResult = 0;
}
BOOL CBeamDataManagerView::OnScroll(UINT nScrollCode, UINT nPos, BOOL bDoScroll)
{
// TODO: Add your specialized code here and/or call the base class
return CFormView::OnScroll(nScrollCode, nPos, bDoScroll);
}
//
//void CBeamDataManagerView::OnDestroy()
//{
// CFormView::OnDestroy();
//
// CWnd *pMainWnd=AfxGetApp()->GetMainWnd();
// pMainWnd->SendMessage(WM_USER+50,
// (WPARAM)m_childviewlocation.GetBuffer(m_childviewlocation.GetLength()),
// (LPARAM)"-");
//
// // TODO: Add your message handler code here
//}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -