📄 selectitem.cpp
字号:
// SelectItem.cpp : implementation file
//
#include "stdafx.h"
#include "New.h"
#include "SelectItem.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern CSelectItemInfo pSel;
extern COperDb OperDb;
/////////////////////////////////////////////////////////////////////////////
// CSelectItem dialog
CSelectItem::CSelectItem(CWnd* pParent /*=NULL*/)
: CDialog(CSelectItem::IDD, pParent)
{
//{{AFX_DATA_INIT(CSelectItem)
m_strComboSel = _T("");
m_strStaticName = _T("");
//}}AFX_DATA_INIT
}
void CSelectItem::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSelectItem)
DDX_Control(pDX, IDCANCEL, m_btnCanCel);
DDX_Control(pDX, IDOK, m_btnOK);
DDX_Control(pDX, IDC_LIST_SELECT, m_strListSel);
DDX_CBString(pDX, IDC_COMBO_SELECT, m_strComboSel);
DDX_Text(pDX, IDC_STATIC_NAME, m_strStaticName);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSelectItem, CDialog)
//{{AFX_MSG_MAP(CSelectItem)
ON_CBN_SELCHANGE(IDC_COMBO_SELECT, OnSelchangeComboSelect)
ON_CBN_EDITCHANGE(IDC_COMBO_SELECT, OnEditchangeComboSelect)
ON_NOTIFY(NM_CLICK, IDC_LIST_SELECT, OnClickListSelect)
ON_NOTIFY(NM_DBLCLK, IDC_LIST_SELECT, OnDblclkListSelect)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSelectItem message handlers
void CSelectItem::AddComboText()
{
try
{
CString strBuf;
strBuf.Format("SELECT DISTINCT %s FROM %s", pSel.strColumnName, pSel.strTable);
_bstr_t CommText;
CommText = strBuf;
_variant_t vRecordsAffected;
OperDb.pRecordset = OperDb.pConn->Execute(CommText, &vRecordsAffected, adCmdText);
if(vRecordsAffected.lVal==VT_NULL) return;
OperDb.pRecordset->MoveFirst();
CComboBox *p=(CComboBox*)GetDlgItem(IDC_COMBO_SELECT);
p->AddString(_T("所有"));
do
{
_bstr_t str = pSel.strColumnName;
_variant_t vtGet = OperDb.pRecordset->GetCollect(str);
if(vtGet.vt != NULL)
{
strBuf.Format("%s", OperDb.CrackStrVariant(vtGet));
p->AddString(strBuf);
}
OperDb.pRecordset->MoveNext();
}while(!(OperDb.pRecordset->EndOfFile));
}
catch(_com_error &e)
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
AfxMessageBox(e.Description());
return;
}
catch(...)
{
return;
}
}
void CSelectItem::UpdateList(CString strSel)
{
try
{
CString strBuf, strBuf1;
strBuf.Format("SELECT * FROM %s ", pSel.strTable);
if(strSel != _T("") && strSel != _T("所有") && strSel != _T("NULL"))
{
strBuf1.Format("WHERE %s LIKE '%%%s%%'", pSel.strColumnName, strSel);
strBuf += strBuf1;
}
//if (pSelItemInfo.strTable == "tbl_warehousecell")
//{
// strBuf1.Format(" AND productsn = 0");
// strBuf += strBuf1;
//}
_bstr_t CommText;
CommText = strBuf;
_variant_t vRecordsAffected;
OperDb.pRecordset = OperDb.pConn->Execute(CommText, &vRecordsAffected, adCmdText);
if(vRecordsAffected.lVal==VT_NULL) return;
OperDb.pRecordset->MoveFirst();
int i = 0;
m_strListSel.DeleteAllItems();
do
{
int j = 0;
strBuf.Format("%d", i+1);
m_strListSel.InsertItem(i, strBuf);
m_strListSel.SetItemText(i, j++, strBuf);
_variant_t vtGet;
_bstr_t colname;
for ( ; j<=pSel.nItem; j++)
{
colname = pSel.strColumn[j-1];
vtGet = OperDb.pRecordset->GetCollect(colname);
if(vtGet.vt != NULL)
{
strBuf.Format("%s", OperDb.CrackStrVariant(vtGet));
m_strListSel.SetItemText(i, j, strBuf);
}
}
i++;
OperDb.pRecordset->MoveNext();
}while(!(OperDb.pRecordset->EndOfFile));
}
catch(_com_error &e)
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
// AfxMessageBox(e.Description());
return;
}
catch(...)
{
return;
}
}
void CSelectItem::OnSelchangeComboSelect()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CComboBox *p=(CComboBox*)GetDlgItem(IDC_COMBO_SELECT);
CString strBuf;
p->GetLBText(p->GetCurSel(), strBuf);
UpdateList(strBuf);
}
void CSelectItem::OnEditchangeComboSelect()
{
// TODO: Add your control notification handler code here
UpdateData(true);
UpdateList(m_strComboSel);
}
void CSelectItem::OnClickListSelect(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
CListBox *p=(CListBox*)GetDlgItem(IDC_LIST_SELECT);
p->SetRedraw(0);
int i = m_strListSel.GetSelectionMark();
if(i==-1) return;
else
{
m_strListSel.SetHotItem(i);
m_nItemSelected = i;
}
p->SetRedraw(1);
p->Invalidate();
*pResult = 0;
}
void CSelectItem::OnDblclkListSelect(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
CListBox *p=(CListBox*)GetDlgItem(IDC_LIST_SELECT);
p->SetRedraw(0);
int i = m_strListSel.GetSelectionMark();
if(i==-1) return;
else
{
m_strListSel.SetHotItem(i);
m_nItemSelected = i;
}
p->SetRedraw(1);
p->Invalidate();
*pResult = 0;
OnOK();
}
BOOL CSelectItem::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_btnOK.SetIcon(IDI_ICON_OK);
m_btnOK.DrawTransparent();
m_btnOK.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, OFFSET_COLOR);
m_btnOK.SetColor(CButtonST::BTNST_COLOR_FG_IN, RGB(255, 0, 255));
m_btnCanCel.SetIcon(IDI_ICON_CANCEL1);
m_btnCanCel.DrawTransparent();
m_btnCanCel.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, OFFSET_COLOR);
m_btnCanCel.SetColor(CButtonST::BTNST_COLOR_FG_IN, RGB(255, 0, 255));
m_strStaticName = pSel.strStatic;
CString str;
m_strListSel.InsertColumn(0, "序号");
for (int i = 1; i<= pSel.nItem; i++)
{
str = pSel.strHeadName[i-1];
m_strListSel.InsertColumn(i, str);
}
RECT rect;
m_strListSel.GetWindowRect(&rect);
int w = rect.right - rect.left;
int n = 30;
m_strListSel.SetColumnWidth(0, w/n*2);
m_strListSel.SetColumnWidth(1, w/n*4);
m_strListSel.SetColumnWidth(2, w/n*12);
for (i = 3; i<= pSel.nItem; i++)
{
m_strListSel.SetColumnWidth(i, w/n*6);
}
m_strListSel.SetExtendedStyle(LVS_EX_FULLROWSELECT);
m_strListSel.DeleteAllItems();
UpdateList(pSel.strCondition);
AddComboText();
UpdateData(false);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CSelectItem::OnOK()
{
// TODO: Add extra validation here
if(m_nItemSelected != -1)
{
pSel.strReturn1 = m_strListSel.GetItemText(m_nItemSelected, pSel.nRetNo1 + 1);
pSel.strReturn = m_strListSel.GetItemText(m_nItemSelected, pSel.nRetNo2 + 1);
}
else return;
CDialog::OnOK();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -