首先说说数据库中的递归表,就用地区表做例子:
地区ID | 名称 | 地区ID_F |
1 | 广东 | 0 |
2 | 广西 | 0 |
3 | 广州 | 1 |
4 | 天河 | 3 |
这样的表其实就是一张递归表,通过观察地区ID与地区ID_F的关系可以看出如下递归:广东->广州->天河,广西,顶级节点有两个,就是广东和广西。
当我们在程序中选择地区时,点击广东,然后就出现广东下面各个市,点击了某一个市,就显示该市下面的所以地区。还可以在找不到想要的地点时,相应地添加地点。
这要怎么做呢?首先说绑定数据,绑定数据其实就是查找,我们只需要写一个方法,大致结构如下(以C#为例,具体实现代码忽略>.<):
void bindingNode(int ID_f)
{
//以ID_f为条件,从数据库查找所有地区ID_F的值为ID_f的数据,放到表tb里
//TODO:......
for(int i=0;i<tb.rows.count;i++)
{
//绑定数据
//TODO:......
int childNode_IDf = Convert.ToInt32(tb.rows[i]["地区ID"].ToString());
bindingNode(childNode_IDf);//调用自身,实现递归
}
}
当我们需要绑定数据的时候,只需要调用方法bindingNode(0),这样就可以把整个表的数据提取出来,绑定到相应的控件,例如树形控件上面了。。。。
删除的话就在上面调用自身的方法下面调用删除的方法,像这样:
void deleteNode(int ID_f)
{
//以ID_f为条件,从数据库查找所有地区ID_F的值为ID_f的数据,放到表tb里
//TODO:......
for(int i=0;i<tb.rows.count;i++)
{
//绑定数据
//TODO:......
int childNode_IDf = Convert.ToInt32(tb.rows[i]["地区ID"].ToString());
deleteNode(childNode_IDf);//调用自身,实现递归
}
//调用删除方法,删除地区ID为ID_f的数据
//deleteRow(ID_f)
}
修改就简单啦,直接获取当前选中项的ID,然后想怎么修改就怎么修改吧~新增的话就涉及到两种,一种是增加同级节点,一种是增加子级节点,看你新增回数据库时ID_F怎么选择了。。