如何使用TreeView类显示商品分类方案?源码有BUG,求求大侠救救我!!
void CLeftView::AddItems()
{
/*这段代码,将商品分类方案通过CLeftView(派生自CTreeView)以树状形式显示出来。
假定商品分类方案为2,2,2:意即商品代码前二位表示商品的大类,第3/4位表示商品中类,
后2位则表示商品小类。
所用到的数据库表字段为:Code,代码;Name,名字,模拟数据如下:
Code Name
010000 饮料烟酒
010100 饮料
010101 纯净水
010102 果汁
010200 香烟
020000 洗涤用品
020100 洗衣类
020200 化妆品
..
屏幕显示应该是这样:
|-010000:饮料烟酒
| |
| |-010100:饮料
| | |
| | |-010101:纯净水
| | |-010102:果汗
| |
| |-010200:香烟
|
|-020000:洗涤用品
| |
| |-020100:洗衣类
| |-020200:化妆口
|
|
*/
CustSortSet set;
set.Open();
//此处应先找到编码规则文件,然后读取文件中保存的数据并赋值
int n=3;//共有三级
int nRule[3];
nRule[0]=2;nRule[1]=2;nRule[2]=2;//第一级编码长为2,第二级编码长为2,第三级编码长为2
int nRuleLength=6;//编码总长度为6
HTREEITEM hParent=TVI_ROOT;//父项
HTREEITEM hRoot=TVI_ROOT;//根项
CString strZero;
for (int i=0;i<n;i++)//第一级/第二级/...
{
int nLength=0;
for (int j=0;j<=i;j++)//要处理的码长,例如是第二级,则码长应该为2+2=4
nLength+=nRule[j];
set.MoveFirst();
while (!set.IsEOF()){
CString strCode=set.m_Code;
BOOL bCur=TRUE;//是要处理的级吗?
//前几级及本级不能为零,
//例如处理第二级,则第一级码不能为00,第二级码也不能为00
for (int j=0;j<=i;j++)
{
if (strCode.Left(nRule[j])=="00")
{
bCur=FALSE;
break;
}
}
//本级以后必须全为零
CString strEnd=strCode.Right(nRuleLength-nLength);
if (!bCur||atoi(strEnd)!=0)
{
set.MoveNext();
continue;
}
if (i>0)//不是首级,需找父项
{
hRoot=GetTreeCtrl().GetChildItem(TVI_ROOT);
do{
hParent=hRoot;
BOOL bFound=FALSE;//找到父项了吗?
do{
CString strText=GetTreeCtrl().GetItemText(hParent);
strText=strText.Left(nLength-nRule[i]);
// MessageBox(strText);
CString strC=strCode.Left(nLength-nRule[i]);
// MessageBox(strCode);
// MessageBox(strC);
if (strText==strC)
{
bFound=TRUE;
break;
}
hParent=GetTreeCtrl().GetNextItem(hParent,TVGN_NEXT);
if (!hParent)
break;
}while (TRUE);
if (bFound)
break;
hRoot=GetTreeCtrl().GetNextSiblingItem(hRoot);
if (!hRoot)
break;
}while (TRUE);
}
CString strTemp;
strTemp=set.m_Code+":"+set.m_Name;
GetTreeCtrl().InsertItem(strTemp,m_idxClosed,m_idxClosed,hParent);
set.MoveNext();
}
}
// GetTreeCtrl().Expand(hRoot,TVE_EXPAND);
}