在做一仓库管理系统,用的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"); }

解决方案 »

  1.   

    一步一步的调,在
    m_salelist.InsertColumn(0,"商品大类");
    m_salelist.InsertColumn(1,"商品代码");
    m_salelist.InsertColumn(2,"商品名称");
    后面加一些,看看可不可以显示出来
      

  2.   

    #define   NUM_COL   3
    #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 );
    }
      

  3.   

    把 m_salelist.SetItemText(i,0,varValue.m_pstring->GetBuffer(1));
    改为 m_salelist.InsertItem(i,varValue.m_pstring->GetBuffer(1));即可。
      

  4.   

    就像前面大哥说的,在你用m_salelist.SetItemText(...)之前,你可能需要用m_saleList.InsertItem(...)先插入一项,然后才能对这一项设置各列的数据。
    当然,多行就要多次用InsertItem(...)了。
    另外,关于那个自选择的列表框,网上是有一些这样的类的,你可以找一下,如果实在找不到,你可以Email给我([email protected]),我曾经找了一个(具体地址忘记了,并进行一些改动),我很需要大家互相交流一下。