110,545
社区成员
发帖
与我相关
我的任务
分享
create table T_AREA (
ID char(32) not null,
CODE varchar(50) null,
NAME varchar(50) null,
PARENT_CODE varchar(50) null,
USER_COUNT int null,
INFO varchar(200) null,
constraint PK_T_AREA primary key (ID)
)
DataTable myRegion;
string pid = "00000000000000000000000000000000";
private void button1_Click(object sender, EventArgs e)
{
DataSet ds = GetAllArea();
myRegion = ds.Tables[0];
tv.Nodes.Clear(); //trvXML为你的Treeview控件名
TreeNode trvboot = new TreeNode("花园小区");
DataRow dr = myRegion.Rows.Add();
dr["CODE"] = "888";
dr["PARENT_ID"] = pid;
dr["ID"] = pid;
dr["USER_COUNT"] = -1;
trvboot.Tag = dr;
tv.Nodes.Add(trvboot);
BuildTree("PARENT_ID="+pid, this.myRegion.Select("PARENT_ID=" + pid)[0], trvboot); //把SuperID改成你的父级ID,这里的0为最顶点ID值
tv.Nodes[0].Expand();
}
public DataSet GetAllArea()
{
StringBuilder strSql = new StringBuilder();
strSql.Append("select ID,CODE,NAME,PARENT_ID,USER_COUNT,INFO from T_AREA ");
DataSet ds = DBFacade.ExecuteDataSet(strSql.ToString());
return ds;
}
//使用递归创建 TreeView
private void BuildTree(string expression, DataRow drRow, TreeNode lstNode)
{
int superCount = this.myRegion.Select(expression).Length;
if (superCount > 0)
{
foreach (DataRow dr in this.myRegion.Select(expression))
{
string childExpress = string.Format("PARENT_ID={"+pid+"}", dr["ID"].ToString()); //把SuperID改成你的父级ID
if (this.myRegion.Select(childExpress).Length > 0)
{
TreeNode sublst = new TreeNode(dr["NAME"].ToString());
sublst.Tag = dr;
lstNode.Nodes.Add(sublst);
BuildTree(childExpress, dr, sublst);
}
else
{
BuildTree(childExpress, dr, lstNode);
}
}
}
else
{
TreeNode node = new TreeNode(drRow["NAME"].ToString());
node.Tag = drRow;
lstNode.Nodes.Add(node);
}
public class AreaHelper
{
public T_AREA ArrangeAreaNodes(List<T_AREA> areaNodes)
{
List<T_AREA> arrangedNodes = new List<T_AREA>();
foreach (T_AREA node in areaNodes)
{
node.Text = node.NAME;
node.Tag = node;
T_AREA parent = getNode(arrangedNodes, node.PARENT_ID);
if (parent != null)
{
parent.Nodes.Add(node);
}
else
{
List<T_AREA> children = getChildrenNode(arrangedNodes, node.ID);
foreach (T_AREA child in children)
{
arrangedNodes.Remove(child);
node.Nodes.Add(child);
}
arrangedNodes.Add(node);
}
}
if (arrangedNodes.Count == 0) return null;
return arrangedNodes[0] ;
}
private T_AREA getNode(List<T_AREA> areaNodes, string id)
{
foreach (T_AREA node in areaNodes)
{
if (node.ID == id)
{
return node;
}
}
return null;
}
private List<T_AREA> getChildrenNode(List<T_AREA> areaNodes, string id)
{
List<T_AREA> children = new List<T_AREA>();
foreach (T_AREA node in areaNodes)
{
if (node.PARENT_ID == id)
{
children.Add(node);
}
}
return children;
}
}
Area area = new Area();
//生成资源树
List<T_AREA> nodeList = area.GetAllModel(); // from db
AreaHelper helper = new AreaHelper();
this.area_tv.Nodes.Add(helper.ArrangeAreaNodes(nodeList));
this.area_tv.ExpandAll();