有winform控件treeview1绑定access数据库中的city表,表结构如下
地名 所属省市
南京 江苏省
无锡 江苏省
苏州 江苏省
杭州 浙江省
绍兴 浙江省
最后生成的树结构如下:
江苏省
南京
无锡
苏州
浙江省
杭州
绍兴
请教该如何实现啊,谢谢啦!
地名 所属省市
南京 江苏省
无锡 江苏省
苏州 江苏省
杭州 浙江省
绍兴 浙江省
最后生成的树结构如下:
江苏省
南京
无锡
苏州
浙江省
杭州
绍兴
请教该如何实现啊,谢谢啦!
Dim dt as DataTable
dt = GetDt("select * from tablename where parentid = 0order by sortid")
for i as integer = 0 to dt.rows.count -1
dim tn as new treenode
'绑定tn的各个属性
tv.nodes.add(tn)
if dt.rows(i)("myhref").tostring.length = 0 then
bindchildnode(tn,convert.toint32(dt.rows(i)("id")))
end if
next
end subprotected sub bindchildnode(byval tn as treenode,byval pid as integer)
dim dt as datatable
dt = GetDt("select * from tablename where parentid = '"+pid.tostring+"' order by sortid")
for i as integer = 0 to dt.rows.count -1
dim treeN as new treenode
'各种绑定
tn.childnodes.add(treeN)
if dt.rows(i)("myhref").tostring.length = 0 then
bindchildnode(treen,convert.toint32(dt.rows(i)("id")))
end if
next
end sub
城市 city
省 parent
select parent,citys=
rtrim(stuff((select city+' ' from tst t where t.parent=tst.parent for xml path('')),1,0,''))
from tst
group by parent private void InitEx()
{
db d = new db();
SqlDataReader dr = d.GetAll();
while (dr.Read())
{
TreeNode tnp = new TreeNode(dr["parent"].ToString());
string[] sCitys = dr["citys"].ToString().Split(' ');
foreach (string sCity in sCitys)
{
TreeNode tnc = new TreeNode(sCity);
tnp.Nodes.Add(tnc);
}
treeView1.Nodes.Add(tnp);
}
dr.Close();
}
GetAll 就是执行此SQL语句的返回结果
Access实在不行就查2次吧
private void button2_Click(object sender, EventArgs e)
{
sqlstr="select 所属省市 from city group by 所属省市";
DataTable dtroot = selectinfo(sqlstr); //selectinfo方法是操作数据库的 foreach(DataRow dr in dtroot.Rows)
{
TreeNode tn=new TreeNode();
tn.Text=dr["所属省市"].ToString().Trim();
bindinfo(dr["所属省市"].ToString().Trim(), tn);
treeView1.Nodes.Add(tn);
}
} public void bindinfo(string pstr,TreeNode tn)
{
sqlstr = "select 地名 from city where 所属省市='" + pstr+ "'";
DataTable dtchild = selectinfo(sqlstr); foreach (DataRow drc in dtchild.Rows)
{
TreeNode tnc = new TreeNode();
tnc.Text = drc["地名"].ToString().Trim();
tn.Nodes.Add(tnc);
}
}这样就是你要的效果。