求助:怎么用treeview控件显示数据库里的资料?
我现在有一个类别表m_kind,这个表的资料如下:
字段 m_kind
数据 A
B
C
然后还有一个子表c_kind
m_kind表中的每一类又分为几小类,存在c_kind中,资料如下:(实际情况可能是在c_kind下面还有更小的分类)
字段 m_kind c_kind
A a
A b
A c
B a
B e
C m
C w
我想用TREEVIEW控件显示如下:
A
a
b
c
B
a
e
C
m
w
请问这样怎么做,
哪位可以发个例子给我吗?谢谢。
[解决办法]
string m1,m2,m3,m4,m5,m6,object_name
long n,i,k
int l1,l2,l3,l4,l5,l6,m
//
//datastore dt_area
//dt_area=create datastore
//dt_area.dataobject="d_area"
//
//
treeviewitem item_area,item_area2
long newitem1,newitem2,newitem3,newitem4,newitem5,new,item6
//long rootitem
dw_2.settransobject(sqlca)
m=dw_2.retrieve()
item_area.label=object_name
item_area.data="0"
item_area.pictureindex=1
item_area.SelectedPictureIndex=4
item_area.children=true
tv_1.insertitemlast(0,item_area)
for l1=1 to m
m1=dw_2.object.data[l1,1]
//st_2.text=m1
if dw_2.object.data[l1,3]="0" and dw_2.object.data[l1,4]=1 then
item_area.label=dw_2.object.data[l1,2]
item_area.data=dw_2.object.data[l1,1]
item_area.pictureindex=1
item_area.SelectedPictureIndex=4
item_area.children=true
newitem1=tv_1.insertitemlast(1,item_area)
//end if
for l2=1 to m
m2=dw_2.object.data[l2,1]
if dw_2.object.data[l2,3]=m1 and dw_2.object.data[l2,4]=1 then
item_area.label=dw_2.object.data[l2,2]
item_area.data=dw_2.object.data[l2,1]
item_area.pictureindex=1
item_area.SelectedPictureIndex=4
//if dw_2.object.data[i,5]<>"" then
//item_area.children=false
//item_area.pictureindex=2
//
// end if
newitem2=tv_1.insertitemlast(newitem1,item_area)
for l3=1 to m
m3=dw_2.object.data[l3,1]
if dw_2.object.data[l3,3]=m2 and dw_2.object.data[l3,4]=1 then
item_area.data=dw_2.object.data[l3,1]
item_area.label=dw_2.object.data[l3,2]
item_area.pictureindex=1
item_area.SelectedPictureIndex=4
item_area.children=true
newitem3=tv_1.insertitemlast(newitem2,item_area)
for l4=1 to m
m4=dw_2.object.data[l4,1]
if dw_2.object.data[l4,3]=m3 and dw_2.object.data[l4,4]=1 then
item_area.data=dw_2.object.data[l4,1]
item_area.label=dw_2.object.data[l4,2]
item_area.pictureindex=2
item_area.SelectedPictureIndex=4
item_area.children=true
newitem4=tv_1.insertitemlast(newitem3,item_area)
for l5=1 to m
m5=dw_2.object.data[l5,1]
if dw_2.object.data[l5,3]=m4 and dw_2.object.data[l5,4]=1 then
item_area.data=dw_2.object.data[l5,1]
item_area.label=dw_2.object.data[l5,2]
item_area.pictureindex=2
item_area.SelectedPictureIndex=4
item_area.children=false
newitem5=tv_1.insertitemlast(newitem4,item_area)
end if
next
end if
next
end if
next
end if
next
end if
next
这是一个7层的
------解决方案--------------------
递归生成树的函数:
//====================================================================// 函数: f_tree_init//--------------------------------// 描述: 在树控件根据数据库表递归生成树视图//--------------------------------// 参数:// treeview atv_i 控件名,如TV_1// string as_table 表名// string as_keycolumn 节点代码// string as_valuecolumn 内容// string as_upkeycolumn 表中存放上级的字段名// string as_upkeyvalue 上级代码// long al_roothandle 传0即可//--------------------------------// 返回值: integer//--------------------------------// //--------------------------------// 修改历史: // //====================================================================treeviewitem ltvi_iString ls_sql,ls_syntax,ls_errorString ls_key,ls_valueLong ll_handleLong idatastore lds_i lds_i = CREATE datastore//根据传入的参数,拼检索的SQL语句ls_sql = "select "+as_keycolumn+","+as_valuecolumn+" from "+as_table+" where "+as_upkeycolumn+"='"+as_upkeyvalue+"'" + " order by " + as_keycolumn ls_syntax = sqlca.SyntaxFromSQL(ls_sql,'style(type=grid)',ls_error)//动态执行上述SQL,结果存放在lds_i中IF Len(ls_error) > 0 THENRETURN 0ELSEls_error = ''//上级单位代码为:as_upkeyvalue的结果集lds_i.Create(ls_syntax,ls_error)IF Len(ls_error) > 0 THEN RETURN 0END IFlds_i.SetTransObject(sqlca)lds_i.Retrieve()END IF//遍历上述结果集,插入到TV控件中FOR i = 1 TO lds_i.RowCount( )ls_key = lds_i.GetItemString( i,as_keycolumn)ls_value = lds_i.GetItemString( i,as_valuecolumn) //从结果集中取值ltvi_i.Data = ls_keyltvi_i.Label = ls_valueltvi_i.PictureIndex = 1 //初始节点图片ltvi_i.SelectedPictureIndex = 2 //选中时的节点图片ll_handle = atv_i.InsertItemLast(al_roothandle,ltvi_i) //插到控件里//以本条的节点代码作为上级代码,递归查找下级,直到本次节点的所有下级全部检索完成并插入到TV中,进行下一次循环。f_tree_init(atv_i,as_table,as_keycolumn,as_valuecolumn,as_upkeycolumn,ls_key,ll_handle)NEXTRETURN 0