在做一仓库管理系统,用的ODBC的方式,用ListCtrl将数据库里的内容显示,但是怎么也显示不出来,好容易改了ListCtrl中的Report才显示了标题,内容怎么也显示不出来;
我的界面是这样的,三个编辑框,一个按钮,一个ListCtrl;
编辑框用来录入数据库的内容,添加成功后调用RefreshData将数据库的内容显示在ListCtrl中,但是无论我怎么试验,ListCtrl 只显示了标题,help me !第二个问题是,如果我在录入一项时,能否做到,比如象股票系统一样,只输入6001,那么在另一下拉框中出现的是所有符合6001**的股票供我选择呢,真的,救救我!!下面先附录上第一个问题的对话框的代码:// AddStorename.cpp : implementation file
//#include "stdafx.h"
#include "cangku.h"
#include "AddStorename.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// AddStorename dialog
AddStorename::AddStorename(CWnd* pParent /*=NULL*/)
: CDialog(AddStorename::IDD, pParent)
{
//{{AFX_DATA_INIT(AddStorename) m_sale_code = _T("");
m_sale_name = _T("");
m_sale_type = _T("");
//}}AFX_DATA_INIT
}
void AddStorename::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(AddStorename)
DDX_Control(pDX, IDC_LIST2, m_salelist);
DDX_Text(pDX, IDC_sale_code, m_sale_code);
DDX_Text(pDX, IDC_sale_name, m_sale_name);
DDX_Text(pDX, IDC_sale_type, m_sale_type);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(AddStorename, CDialog)
//{{AFX_MSG_MAP(AddStorename)
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_ADD, OnAddStorename)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// AddStorename message handlers//DEL void AddStorename::OnAddSalename()
//DEL {
//DEL // TODO: Add your control notification handler code here
//DEL
//DEL
//DEL
//DEL
//DEL
//DEL
//DEL
//DEL
//DEL }BOOL AddStorename::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message == WM_KEYDOWN)
{
if(pMsg->wParam == VK_RETURN)
{
UINT nID = GetFocus()->GetDlgCtrlID();
switch( nID)
{
case IDC_STATIC:
break;
case IDOK:
break;
case IDC_LIST2:
break;
case IDC_ADD:
break;
// OnAddStorename();
default:
NextDlgCtrl();
return TRUE;
}
}
} return CDialog::PreTranslateMessage(pMsg);
}void AddStorename::CalcWindowRect(LPRECT lpClientRect, UINT nAdjustType)
{
// TODO: Add your specialized code here and/or call the base class
CDialog::CalcWindowRect(lpClientRect, nAdjustType);
}BOOL AddStorename::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
db.Close();
if (!db.Open(_T("store"))) return FALSE;
//初始化数据列表控件
RECT rectbasic;
m_salelist.GetWindowRect(&rectbasic);// m_salelist.Create(WS_VISIBLE|WS_BORDER|LVS_REPORT,rectbasic,this,1);
m_salelist.SetBkColor(RGB(177,151,240));
m_salelist.SetTextColor(RGB(0,0,0));
m_salelist.SetTextBkColor(RGB(177,151,240));
m_salelist.SetExtendedStyle(LVS_EX_FULLROWSELECT); m_salelist.InsertColumn(0,"商品大类");
m_salelist.InsertColumn(1,"商品代码");
m_salelist.InsertColumn(2,"商品名称");
int widbasic=rectbasic.right-rectbasic.left;
m_salelist.SetColumnWidth(0,widbasic/4);
m_salelist.SetColumnWidth(1,widbasic/4);
m_salelist.SetColumnWidth(2,widbasic/2);
// m_salelist.SetExtendedStyle(LVS_EX_FULLROWSELECT);
AddStorename::RefreshData();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}void AddStorename::OnClose()
{
// TODO: Add your message handler code here and/or call default
db.Close();
EndDialog(IDOK);
CDialog::OnClose();
}void AddStorename::OnAddStorename()
{
// TODO: Add your control notification handler code here
CString strSQL;
UpdateData();
strSQL="insert into saletype (sale_type, sale_code, sale_name)\
values ('"
+m_sale_type+"','"
+m_sale_code+"','"
+m_sale_name+"')";
db.ExecuteSQL(strSQL);
m_sale_type=_T("");
m_sale_code=_T("");
m_sale_name=_T("");
UpdateData(FALSE);
MessageBox("添加成功!","恭喜您",MB_OK);
::SetFocus(GetDlgItem(IDC_sale_type)->m_hWnd);
RefreshData();
}void AddStorename::RefreshData()
{
if(!db.IsOpen()) {
db.Open(_T("store"));
} m_salelist.DeleteAllItems();
Asaletype m_sale;
m_sale.m_pDatabase=&db;
m_sale.Open(AFX_DB_USE_DEFAULT_TYPE,"select * from saletype");
CDBVariant varValue;
if (m_sale.GetRecordCount()!=0) m_sale.MoveFirst();
char buf[20];
int i=0;
while (!m_sale.IsEOF())
{
int temp=0;
m_sale.GetFieldValue(temp,varValue);
m_salelist.SetItemText(i,0,varValue.m_pstring->GetBuffer(1));
m_sale.GetFieldValue(1,varValue);
m_salelist.SetItemText(i,1,varValue.m_pstring->GetBuffer(1));
m_sale.GetFieldValue(2,varValue);
m_salelist.SetItemText(i,2,varValue.m_pstring->GetBuffer(1));
m_sale.MoveNext();
i++;
// MessageBox(varValue.m_pstring->GetBuffer(1),"dash");
}
//m_salelist.SetItemText(0,0,"wo ai ni ");
//m_salelist.SetItemText(0,1,"kkkk");
//m_salelist.SetItemText(0,2,"kjkjkjlk"); }
我的界面是这样的,三个编辑框,一个按钮,一个ListCtrl;
编辑框用来录入数据库的内容,添加成功后调用RefreshData将数据库的内容显示在ListCtrl中,但是无论我怎么试验,ListCtrl 只显示了标题,help me !第二个问题是,如果我在录入一项时,能否做到,比如象股票系统一样,只输入6001,那么在另一下拉框中出现的是所有符合6001**的股票供我选择呢,真的,救救我!!下面先附录上第一个问题的对话框的代码:// AddStorename.cpp : implementation file
//#include "stdafx.h"
#include "cangku.h"
#include "AddStorename.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// AddStorename dialog
AddStorename::AddStorename(CWnd* pParent /*=NULL*/)
: CDialog(AddStorename::IDD, pParent)
{
//{{AFX_DATA_INIT(AddStorename) m_sale_code = _T("");
m_sale_name = _T("");
m_sale_type = _T("");
//}}AFX_DATA_INIT
}
void AddStorename::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(AddStorename)
DDX_Control(pDX, IDC_LIST2, m_salelist);
DDX_Text(pDX, IDC_sale_code, m_sale_code);
DDX_Text(pDX, IDC_sale_name, m_sale_name);
DDX_Text(pDX, IDC_sale_type, m_sale_type);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(AddStorename, CDialog)
//{{AFX_MSG_MAP(AddStorename)
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_ADD, OnAddStorename)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// AddStorename message handlers//DEL void AddStorename::OnAddSalename()
//DEL {
//DEL // TODO: Add your control notification handler code here
//DEL
//DEL
//DEL
//DEL
//DEL
//DEL
//DEL
//DEL
//DEL }BOOL AddStorename::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message == WM_KEYDOWN)
{
if(pMsg->wParam == VK_RETURN)
{
UINT nID = GetFocus()->GetDlgCtrlID();
switch( nID)
{
case IDC_STATIC:
break;
case IDOK:
break;
case IDC_LIST2:
break;
case IDC_ADD:
break;
// OnAddStorename();
default:
NextDlgCtrl();
return TRUE;
}
}
} return CDialog::PreTranslateMessage(pMsg);
}void AddStorename::CalcWindowRect(LPRECT lpClientRect, UINT nAdjustType)
{
// TODO: Add your specialized code here and/or call the base class
CDialog::CalcWindowRect(lpClientRect, nAdjustType);
}BOOL AddStorename::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
db.Close();
if (!db.Open(_T("store"))) return FALSE;
//初始化数据列表控件
RECT rectbasic;
m_salelist.GetWindowRect(&rectbasic);// m_salelist.Create(WS_VISIBLE|WS_BORDER|LVS_REPORT,rectbasic,this,1);
m_salelist.SetBkColor(RGB(177,151,240));
m_salelist.SetTextColor(RGB(0,0,0));
m_salelist.SetTextBkColor(RGB(177,151,240));
m_salelist.SetExtendedStyle(LVS_EX_FULLROWSELECT); m_salelist.InsertColumn(0,"商品大类");
m_salelist.InsertColumn(1,"商品代码");
m_salelist.InsertColumn(2,"商品名称");
int widbasic=rectbasic.right-rectbasic.left;
m_salelist.SetColumnWidth(0,widbasic/4);
m_salelist.SetColumnWidth(1,widbasic/4);
m_salelist.SetColumnWidth(2,widbasic/2);
// m_salelist.SetExtendedStyle(LVS_EX_FULLROWSELECT);
AddStorename::RefreshData();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}void AddStorename::OnClose()
{
// TODO: Add your message handler code here and/or call default
db.Close();
EndDialog(IDOK);
CDialog::OnClose();
}void AddStorename::OnAddStorename()
{
// TODO: Add your control notification handler code here
CString strSQL;
UpdateData();
strSQL="insert into saletype (sale_type, sale_code, sale_name)\
values ('"
+m_sale_type+"','"
+m_sale_code+"','"
+m_sale_name+"')";
db.ExecuteSQL(strSQL);
m_sale_type=_T("");
m_sale_code=_T("");
m_sale_name=_T("");
UpdateData(FALSE);
MessageBox("添加成功!","恭喜您",MB_OK);
::SetFocus(GetDlgItem(IDC_sale_type)->m_hWnd);
RefreshData();
}void AddStorename::RefreshData()
{
if(!db.IsOpen()) {
db.Open(_T("store"));
} m_salelist.DeleteAllItems();
Asaletype m_sale;
m_sale.m_pDatabase=&db;
m_sale.Open(AFX_DB_USE_DEFAULT_TYPE,"select * from saletype");
CDBVariant varValue;
if (m_sale.GetRecordCount()!=0) m_sale.MoveFirst();
char buf[20];
int i=0;
while (!m_sale.IsEOF())
{
int temp=0;
m_sale.GetFieldValue(temp,varValue);
m_salelist.SetItemText(i,0,varValue.m_pstring->GetBuffer(1));
m_sale.GetFieldValue(1,varValue);
m_salelist.SetItemText(i,1,varValue.m_pstring->GetBuffer(1));
m_sale.GetFieldValue(2,varValue);
m_salelist.SetItemText(i,2,varValue.m_pstring->GetBuffer(1));
m_sale.MoveNext();
i++;
// MessageBox(varValue.m_pstring->GetBuffer(1),"dash");
}
//m_salelist.SetItemText(0,0,"wo ai ni ");
//m_salelist.SetItemText(0,1,"kkkk");
//m_salelist.SetItemText(0,2,"kjkjkjlk"); }
解决方案 »
- ListCtrl中如何灰掉一列,不能修改?
- 请推荐方案,主程序如何解决附加模块dll不稳定导致整体exe崩溃?
- 高难度问题。
- 关于CStudioFile 中seek()的问题
- win2k系统中,修复网络连接所用的API是哪个呢?
- 高手请进:如何保证接收数据的顺序与发送顺序一致?
- 请问怎么得到相连的SOCKET的另一端的主机名?
- vcbear,我已经打包发过去了
- 如何在VC++6.0中实现数值型与字符串(CString)的转换(类似于Basic中的Val,Str$)多谢
- 求解libfftw3f-3.dll does not match the current target platform
- 大消息在新浪看到比尔盖茨被杀的消息。
- 请问大家,在进入C++时代后,在C++方面还有哪些方面推荐使用宏,或是用宏能更好的解决的?
m_salelist.InsertColumn(0,"商品大类");
m_salelist.InsertColumn(1,"商品代码");
m_salelist.InsertColumn(2,"商品名称");
后面加一些,看看可不可以显示出来
#define NUM_ROW 3
INT nIndex;
LV_COLUMN lvc;m_ctrUserList.SetExtendedStyle( LVS_EX_HEADERDRAGDROP |LVS_EX_FULLROWSELECT
| LVS_EX_GRIDLINES | LVS_EX_TRACKSELECT );lvc.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;
lvc.fmt = LVCFMT_LEFT;// 添加表头
for( nIndex = 0; nIndex < NUM_COL; nIndex++ )
{
lvc.pszText = (LPTSTR)gzColName[nIndex];
lvc.cx = m_ctrUserList.GetStringWidth( lvc.pszText ) + 50;
lvc.iSubItem = nIndex;
m_ctrUserList.InsertColumn( nIndex, &lvc );
}for( int nIndex = 0; nIndex < NUM_ROW; nIndex++)
{
// 插入第一项
lvItem.iItem = nIndex;
lvItem.iSubItem = 0;
lvItem.pszText = _T("");
m_ctrUserList.InsertItem( &lvItem ); // 插入第二项
lvItem.iItem = nIndex;
lvItem.iSubItem = 1;
lvItem.pszText = (LPTSTR)(LPCTSTR)strUserName;
m_ctrUserList.SetItem( &lvItem ); // 插入第三项
lvItem.iItem = nIndex;
lvItem.iSubItem = 2;
lvItem.pszText = _T("********");
m_ctrUserList.SetItem( &lvItem );
}
改为 m_salelist.InsertItem(i,varValue.m_pstring->GetBuffer(1));即可。
当然,多行就要多次用InsertItem(...)了。
另外,关于那个自选择的列表框,网上是有一些这样的类的,你可以找一下,如果实在找不到,你可以Email给我([email protected]),我曾经找了一个(具体地址忘记了,并进行一些改动),我很需要大家互相交流一下。