不知道大家有没有注意过,在XP下,用资源管理器查看一个目录时候,如果在列表中点击“按组排列”,列表就会显示为按照名称分成一个一个区域的样子,我觉得非常直观,可是我花了很大功夫,也没有找到实现的方法,不知道有那位兄弟实现过,说一说吧

解决方案 »

  1.   

    LVGROUP lvGroup;
        ZeroMemory(&lvGroup, sizeof(LVGROUP));
        lvGroup.cbSize = sizeof(LVGROUP);
        lvGroup.mask = LVGF_HEADER | LVGF_GROUPID;
        LVITEM lvItem;
        ZeroMemory(&lvItem, sizeof(LVITEM));
        lvItem.mask = LVIF_TEXT | LVIF_GROUPID | LVIF_PARAM;    while (!pRst->get_EOF())
        {
            COleVariant covVar = pRst->get_Collect(COleVariant(_T("fm_Name")));
            CString strHeader = covVar.bstrVal;
            strHeader += " (";
            covVar = pRst->get_Collect(COleVariant(_T("fm_Role")));
            strHeader += covVar.bstrVal;
            strHeader += ")";
            covVar = pRst->get_Collect(COleVariant(_T("fm_ID")));
            strSQL.Format(_T("SELECT SUM([ba_Balance]) FROM [BankAccount] WHERE [fm_ID]=%d"), covVar.lVal);
            CADORecordset *pRstAccount = pDoc->GetRecordset(strSQL);
            if (pRstAccount)
            {
                COleCurrency cocBalance( pRstAccount->get_Collect(COleVariant((long)0)));
                delete pRstAccount;
                pRstAccount = NULL;
                strHeader += " - 总余额:";
                strHeader += cocBalance.Format();
                strHeader += "元";
            }
            lvGroup.pszHeader = strHeader.GetBuffer();
            int nGroup = ctlList.InsertGroup(lvGroup.iGroupId, &lvGroup);
            lvItem.iGroupId = nGroup;        strSQL.Format(_T("SELECT [ba_ID], [ba_Name], [ba_AccountNo], [ba_Balance], [ba_Fixed] FROM [BankAccount] WHERE [fm_ID]=%d"), covVar.lVal);
            pRstAccount = pDoc->GetRecordset(strSQL);
            if (pRstAccount)
            {
                while (!pRstAccount->get_EOF())
                {
                    covVar = pRstAccount->get_Collect(COleVariant(_T("ba_Name")));
                    lvItem.pszText = covVar.bstrVal;
                    covVar = pRstAccount->get_Collect(COleVariant(_T("ba_ID")));
                    lvItem.lParam =covVar.lVal;
                    int nItem = ctlList.InsertItem(&lvItem);
                    lvItem.iItem++;
                    covVar = pRstAccount->get_Collect(COleVariant(_T("ba_AccountNo")));
                    ctlList.SetItemText(nItem, 1, covVar.bstrVal);
                    covVar = pRstAccount->get_Collect(COleVariant(_T("ba_Balance")));
                    COleCurrency cocBalance(covVar);
                    ctlList.SetItemText(nItem, 2, cocBalance.Format(0, MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), SORT_CHINESE_PRC)));
                    covVar = pRstAccount->get_Collect(COleVariant(_T("ba_Fixed")));
                    if (covVar.boolVal)
                        ctlList.SetItemText(nItem, 3, _T("定期"));
                    else
                        ctlList.SetItemText(nItem, 3, _T("活期"));
                    pRstAccount->MoveNext();
                }
                delete pRstAccount;
                pRstAccount = NULL;
            }
            lvGroup.iGroupId++;
            pRst->MoveNext();
        }
    这是我代码中的,把数据库操作部分去掉看。