根据网上的源码,做一个无限级分类,添加已经实现了,就卡在删除这里了。
我想实现的是:删除目录时,若其下有子目录,一并删除,这个应该怎么实现
我是这样想的:
//取得要删除的那条记录的ClassID
string FirstClassID = content.ClassID;
List<string> classID = new List<string>();
using (OleDbConnection conn = new OleDbConnection(connString))
{
conn.Open();
using (OleDbCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "select ClassID from Content_Class where ClassParents = '" + FirstClassID + "'";
using (OleDbDataReader reader = cmd.ExecuteReader())
{
if (reader.Read())
{
string classid = reader.GetString(reader.GetOrdinal("ClassID"));
classID.Add(classid);
classID.Add(FirstClassID);
//不懂怎么让它一直这样执行下去,直到它不包含子目录为止
}
}
}
}
提供一个思路
string FirstClassID = content.ClassID; List<string> classID = new List<string>(); using (OleDbConnection conn = new OleDbConnection(connString)) { List<string> deletingClassId = new List<string>(); GetDeletingClassID(FirstClassID,conn,ref deletingClassId); } private void GetDeletingClassID(String classId, OleDbConnection conn,ref List<string> deletingClassId) { using (OleDbCommand cmd = conn.CreateCommand()) { cmd.CommandText = "select ClassID from Content_Class where ClassParents = '" + classId + "'"; using (OleDbDataReader reader = cmd.ExecuteReader()) { if (reader.Read()) { string classidResult = reader.GetString(reader.GetOrdinal("ClassID")); if (String.IsNullOrWhiteSpace(classidResult)) { return; } else { deletingClassId.Add(classidResult); GetDeletingClassID(classidResult,conn,ref deletingClassId); } } } }
我要做的和你这个一样,你把表结构说明一下发给我吧。1071255597
你既然已经得到了要删除节点的id,那就可以直接用一条sql语句就可以删掉该节点的所有子节点啊
delete from content_class where classparents=id
循環 要刪除的目錄,通過上面的語句刪除。
你這個是無限級的,就這一些代碼,只能看到是2級哦。無限級的,最好用遞歸。
需要用到树的遍历, 即删除节点时,将它的子节点列表以递归的形式返回,可以放到List里,然后删除即可。
我现在也在做一个无限级,表结构我不懂。1071255597
你把你的表结构发给我吧,我现在也要做这个,不懂,查了好多也不能实现,感觉你这个还是可以的。1071255597