所做的操作是 在选取部门的时,不显示自己及其子部门
刚开始时是这样做的
this.DropDownList1.Items.Add(new ListItem("该部门无上级部门", "0"));
getDepartmentSon(departmentid);
getDepartmentSons(departmentid);
#region 不包含本部门
private void getDepartmentSon(string depid)
{
try
{
string sql = "select departmentname,departmentid from TOrganization_DepartmentBasicInfo where departmentid<>'" + depid + "' order by departmentname";
DataTable dt = dataHelper.ExecuteDataSet(sql).Tables[0];
if (dt.Rows.Count != 0)
{
foreach (System.Data.DataRow dr in dt.Rows)
{
this.DropDownList1.Items.Add(new ListItem(dr[0].ToString(), dr[1].ToString()));
}
}
}
catch (Exception error)
{
string msg = error.Message;
}
}
#endregion 不包含本部门
#region 递归不包含的子部门
private void getDepartmentSons(string parentDepartmentID)
{
try
{
string sql = "select departmentid from TOrganization_DepartmentRelationship where superiordepartmentid=('" + parentDepartmentID + "')";
DataTable dt = dataHelper.ExecuteDataSet(sql).Tables[0];
foreach (System.Data.DataRow dr in dt.Rows)
{
string departid = dr[0].ToString();
string sql1 = "select departmentname,departmentid from TOrganization_DepartmentBasicInfo where departmentid in ('" + dr[0].ToString() + "')";
DataTable dt1 = dataHelper.ExecuteDataSet(sql1).Tables[0];
foreach (DataRow dr1 in dt1.Rows)
{
//把这个部门下子部门去除
this.DropDownList1.Items.Remove(new ListItem(dr1[0].ToString(), dr1[1].ToString()));
}
getDepartmentSons(departid);
}
}
catch (Exception error)
{
string msg = error.Message;
}
}
#endregion 递归不包含的子部门
但是这样做效率不高,后来改成储存过程实现部门的递归
declare @tb table(id int)
insert @tb select DepartmentID from TOrganization_DepartmentRelationship
where SuperiorDepartmentID = 1
while @@rowcount > 0
insert @tb select a.DepartmentID from TOrganization_DepartmentRelationship as a
inner join @tb as b on a.SuperiorDepartmentID = b.id
and a.DepartmentID not in(select id from @tb)
select id from @tb
select a.DepartmentID ,b.DepartmentName from TOrganization_DepartmentRelationship as a,dbo.TOrganization_DepartmentBasicInfo as b
where a.DepartmentID not in(select id from @tb)
and a.DepartmentID<>1
and a.DepartmentID=b.DepartmentID