在下有两个问题,请大家赐教,均是有关于数据库中数据在列表控件中的显示问题,
问题:
1.有一张科目表:表中有三项内容:科目编号,科目类型编号,科目名称.其中科目类型编号是该表的一个外键,其为科目类型字典表的主键.科目类型字典有两项内容:科目类型编号,科目类型名称.
  问题是,如何在一个列表控件中显示以下内容:科目编号,科目类型名称,科目名称.
  注:不是列表对话框!
2.有一张用户表:表中有三项内容:用户名,用户密码,用户工作组,没有用户编号.
  问题是:如何在列表控件中显示以下内容:用户名,用户工作组.
  下面是我写的:编译没有错误但是就是显示不出内容!(我的是显示全部内容,包括用户密码,现在不需要显示用户密码!)
void CDelUserDlg::RefreshData()
{
if(!m_database.IsOpen())
{
m_database.Open(_T("学生管理系统"));
}
m_UserList.DeleteAllItems();
CDelUserSet *m_recordset=new CDelUserSet(&m_database);
CString strSQL;
strSQL.Format("select * from Table_User ");
m_recordset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
CDBVariant var;
if(m_recordset->GetRecordCount()!=0) m_recordset->MoveFirst();
int i=0;
while(!(m_recordset->IsEOF()))
{
int temp=0;
m_recordset->GetFieldValue(temp,var);
m_UserList.SetItemText(i,0,var.m_pstring->GetBuffer(1));
m_recordset->GetFieldValue(1,var);
m_UserList.SetItemText(i,1,var.m_pstring->GetBuffer(1));
m_recordset->GetFieldValue(2,var);
m_UserList.SetItemText(i,2,var.m_pstring->GetBuffer(1));
m_recordset->MoveNext();
i++;
}
}
3.请问有没有方法使列表控件处于编辑状态,在编辑完成之后,点击确定,是修改的内容写入数据库中!
如果贴在上方不下,可以可我联系:我得Email:[email protected]

解决方案 »

  1.   

    你跟踪一下,看看var.m_pstring->GetBuffer(1) 取到值没有
      

  2.   

    for (int i=0;i < 10;i++)
    {
       strText.Format(TEXT("item %d"), i);   // Insert the item, select every other item.
       pmyListCtrl->InsertItem(
          LVIF_TEXT|LVIF_STATE, i, strText, 
          (i%2)==0 ? LVIS_SELECTED : 0, LVIS_SELECTED,
          0, 0);   // Initialize the text of the subitems.
       for (int j=1;j < nColumnCount;j++)
       {
          strText.Format(TEXT("sub-item %d %d"), i, j);
          pmyListCtrl->SetItemText(i, j, strText);
       }
      

  3.   

    listctrl控件不是这样用的
    我是我的程序
    list.InsertColumn(0,"项目",LVCFMT_LEFT,120);
    list.InsertColumn(1,"金额",LVCFMT_RIGHT,120);
    list.InsertColumn(2,"收费时间",LVCFMT_LEFT,110);
    list.InsertColumn(3,"打印票号",LVCFMT_LEFT,130);
    //sno="A";
    extern CDatabase db;
    CODBCRecordset rs(&db);
    CString s;
    s.Format("select * from usertabb009 where field_5 in (select field_2 from usertabb008 where field_4 = 1) and field_3 = '%s'",sno);
    rs.Open(s);
    int i=0,iPos;
    double d1;
    LV_ITEM lvitem;
    GetDlgItem(IDC_STATIC1)->SetWindowText(sno);
    while(!rs.IsEOF()){
    lvitem.mask=LVIF_TEXT;
    lvitem.iItem=i++;
    lvitem.iSubItem=0;
    s = rs("field_5");
    lvitem.pszText=s.GetBuffer(s.GetLength());
    s.ReleaseBuffer(s.GetLength());
    iPos=list.InsertItem(&lvitem);
    lvitem.iItem=iPos;
    lvitem.iSubItem=1;
    d1 = rs("field_8");
    s.Format("%.2f",d1);
    lvitem.pszText=s.GetBuffer(s.GetLength());
    s.ReleaseBuffer(s.GetLength());
    list.SetItem(&lvitem);
    lvitem.iSubItem=2;
    s = rs("field_9").AsString();
    lvitem.pszText=s.GetBuffer(s.GetLength());
    s.ReleaseBuffer(s.GetLength());
    list.SetItem(&lvitem);
    lvitem.iSubItem=3;
    s = rs("field_10");
    lvitem.pszText=s.GetBuffer(s.GetLength());
    s.ReleaseBuffer(s.GetLength());
    list.SetItem(&lvitem);
    rs.MoveNext();
    }
    LONG lStyle;
    lStyle=GetWindowLong(list.m_hWnd,GWL_STYLE);//获取当前窗口类型
    lStyle&=~LVS_TYPEMASK; //清除显示方式位
    lStyle|=LVS_REPORT; //设置显示方式
    //lStyle &=~LVS_NOCOLUMNHEADER ;
    SetWindowLong(list.m_hWnd,GWL_STYLE,lStyle);//设置窗口类型
    list.SetExtendedStyle(list.GetExtendedStyle() | LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES );
    你自己改一下就行了
      

  4.   

    while(!m_basicset.IsEOF())
    {

    m_basicset.GetFieldValue(0,varValue);
    sprintf(buf,"%d",varValue.m_lVal);
    m_info.InsertItem(i,buf);
    m_basicset.GetFieldValue(1,varValue);
    m_info.SetItemText(i,1,varValue.m_pstring->GetBuffer(1));
    m_basicset.GetFieldValue(2,varValue);
             sprintf(buf,"%d",varValue.m_chVal);
    m_info.SetItemText(i,2,buf);
    m_basicset.GetFieldValue(3,varValue);
    m_info.SetItemText(i,3,varValue.m_pstring->GetBuffer(1));
    m_basicset.GetFieldValue(4,varValue);
    m_info.SetItemText(i,4,varValue.m_pstring->GetBuffer(1));
    m_basicset.GetFieldValue(5,varValue);
    sprintf(buf,"%d-%d-%d",varValue.m_pdate->year,varValue.m_pdate->month,varValue.m_pdate->day); 
    m_info.SetItemText(i,5,buf);
    m_basicset.GetFieldValue(6,varValue);
    m_info.SetItemText(i,6,varValue.m_pstring->GetBuffer(1));

    ..............
                             ....................................
    m_basicset.GetFieldValue(18,varValue);
    sprintf(buf,"%d",varValue.m_chVal);
    m_info.SetItemText(i,18,buf);
    m_basicset.MoveNext();
    i++;
    }
      

  5.   

    大家好,感谢大家的帮忙!今天我已经调试出来了!我把我原来的代码稍微改了一下!已经成功!
    下面是我得代码:
    void CDelUserDlg::RefreshData(){
    if(!m_database.IsOpen())
    {
    m_database.Open(_T("学生管理系统"));
    }
    m_UserList.DeleteAllItems();
    CDelUserSet *m_recordset=new CDelUserSet(&m_database);

    CString strSQL;

    strSQL.Format("select * from Table_User ORDER BY 用户工作组 ");
    m_recordset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
    CDBVariant var;

    if(m_recordset->GetRecordCount()!=0) m_recordset->MoveFirst();
    int i=0;
    while(!(m_recordset->IsEOF()))
    {
    int temp=0;
    m_recordset->GetFieldValue(temp,var);
    m_UserList.InsertItem(i,var.m_pstring->GetBuffer(1));

    m_recordset->GetFieldValue(2,var);
    m_UserList.SetItemText(i,1,var.m_pstring->GetBuffer(1));
    m_recordset->MoveNext();
    i++;
    }
    }
    以供大家参考!
    现在我把者一百分平均分给大家!以表谢意!