请教一个递归算法问题
在数据库中,有如下一张表
dwdm dwmc sjdwdm
1 1单位 0
2 2号单位 1
3 3号单位 1
4 2号下级单位 2
5 3号下级单位 3
6 2号下级单位子单位 4
~~~~~~~~~~~~~~
就这样无限的分下去
从表中看出,我们的根节点是 dwdm为1。
那么,我想请教各位,如何获得软件登录单位下的所有单位。
请各位指教~
------解决方案--------------------建议加一个字符型编码字段
dwdm dwmc sjdwdm 编码
1 1单位 0 1
2 2号单位 1 12
3 3号单位 1 13
4 2号下级单位 2 124
5 3号下级单位 3 135
6 2号下级单位子单位 4 1246
对编码字段用LIKE操作符,很容易得到各级子单位
------解决方案--------------------建议加一个字符型编码字段
dwdm dwmc sjdwdm 编码
1 1单位 0 1
2 2号单位 1 12
3 3号单位 1 13
.....
100 100单位 1 这里怎么表示???如何与其他区分?
n 2号下级单位 2 124
楼上方法不好把。如果数量巨大,你怎么编码
------解决方案--------------------public void InitDW(string strDWPID,ref DataTable dtData,ref DataTable dtObject)
{
foreach (DataRow dr in dtData.Rows)
{
if (dr[ "dwdm "].ToString().Trim() == strDWPID)
{
DataRow drObject = dtObject.NewRow();
dr.ItemArray.CopyTo(drObject.ItemArray);
dtObject.Rows.Add(drObject);
drObject.AcceptChanges;
InitDW(dr[ "sjdwdm "].ToString().Trim(),ref dtData,ref dtObject);
}
}
}
dtData :将你的所有数据读出来形成一个DataTable
dtObject :将你读取出来的表copy个副本,清空数据
调用时 需要InitDW( "1 ",ref dtData,ref dtObject)
我就手写了一个 没有数据也没有测试阿
------解决方案-------------------- 递归算法
//id是父结点编号 (如果需要生成树的话,传参数加个node类型)
Private GetChild (Int ID)
{
select * from 表 where 父结点编号(sjdwdm) = ID
将数据集放在dataset中,
if (ds.tables[0].Rows.Count== 0)
{
return;
}
for (i = 0 ; i <= ds.tables[0].Rows.Count -1 ; i++)
{
//递归
Private GetChild (ds.tables[0].Rows[i][ "dwdm "]);
//定义node,进行绑定,或者返回东西之类
}
}
以上只是个基本框架,lz填充把
如果追求效率,lz可以把select 部分换成dataView过滤,传值的时候,加个dataView就可以
这样可以只select一次,内存中递归查找
------解决方案--------------------不会 帮顶
------解决方案--------------------那就只能遍历了