日期:2014-05-18  浏览次数:20435 次

一个查询条件的问题,请有类试经验的兄弟们来看看!!
我做部门查询,由于部门的结构是一个树型的,
把他做成了无限级,我把他用树型显示在dropDownList中,
显示的格式是
|--董事会
      |--总经办
              |--一分部
              |--二分部
                    |--dfdfd
这样的形式,问题是我选择董事会要查询出他所有子部门的信息,
这个部门表的结构是
ID,部门名称,父部门ID,
请问一下,这个问题如何解决,
并且按部门查询要和其他的查询条件同时一起使用并分页,
现在分页等都没有问题,就是这个按部门查询怎么解决阿!
现谢谢各位啦!!!

------解决方案--------------------
是要选择一个父类别,然后将所有子类别遍历一边,全部查询是吗?
可以使用递归.
------解决方案--------------------
可以用树形节点来处理这个问题,个人认为是最好的处理方法
------解决方案--------------------
学习..
------解决方案--------------------
一般这种成树的数据,在数据库设计时往往会加一个用于快速搜索的字段。
比如说简单一点的设一个顶层菜单的ID 如加一个“顶级部门的ID”

复杂一点的设一个以某种逻辑构成的字段,如“董事会”的id是0101,“总经办”的id是0102,那么搜索用的字段值可以设成0101_0102,“一分部”就是0101_0102_xxxx 这样查询的时候一条like语句就可以把子节点全部筛选出来了,用DataView处理一下就成树了。

这样可提高数据查询的速度,不然就只能用游标或一条条Sql语句来递归了。
------解决方案--------------------
如果你的表建立得有交子关系得话.

用repate建立交子关系邦定到select中.
------解决方案--------------------
做过类似的。
用递归,可以找到所有的child节点.也可以只找到leaf节点
------解决方案--------------------
你绑定时候的datavalue跟datatext不是分开的吗?用datavalue查询不就好了!!
------解决方案--------------------
但添加部门的时候改动又会很大
---------------------------------------------------
不会很大的,那是一列计算列,不用去管它的,我的系统一直是这样做的,呵呵:)
------解决方案--------------------
用递归
private DataTable GetAllChildNodes(int nodeid)
{
DataTable dt = (select * from [tbl] where ID= nodeid);
DataTable dtChild = (select * from [tbl] where parentID = nodeid)
if(dtChild.rows.count=0) //没有子节点
return dt;
else
{
foreach(datarow dr in dtChild.rows)
{
dt.add(dr);//先把dr添加加到dt
GetAllChildNodes(int.parse(dr[0].tostring()));
}
}
}
------解决方案--------------------
.
------解决方案--------------------
学习