开发环境VS2008 (asp.net)网络开发; 数据库sqlserver 表如下( 和普通的绑定树的表,有点不同,他的父和孩子一样多)
有这样一个表 aid aname bid bname
1 a 1001 achild1
1 a 1002 achild2
1 a 1003 achild3
2 b x01 bchild1
2 b x02 bchild2
3 c d01 cchild1
.............
得到 --a
--achild1
--achild2
--achild3
--b
--bchild1
--bchild2
+c
有这样一个表 aid aname bid bname
1 a 1001 achild1
1 a 1002 achild2
1 a 1003 achild3
2 b x01 bchild1
2 b x02 bchild2
3 c d01 cchild1
.............
得到 --a
--achild1
--achild2
--achild3
--b
--bchild1
--bchild2
+c
DECLARE @t TABLE(ID char(3),PID char(3),Name nvarchar(10))
INSERT @t SELECT '001',NULL ,'山东省'
UNION ALL SELECT '002','001','烟台市'
UNION ALL SELECT '004','002','招远市'
UNION ALL SELECT '003','001','青岛市'
UNION ALL SELECT '005',NULL ,'四会市'
UNION ALL SELECT '006','005','清远市'
UNION ALL SELECT '007','006','小分市'--深度排序显示处理
--生成每个节点的编码累计(相同当单编号法的编码)
DECLARE @t_Level TABLE(ID char(3),Level int,Sort varchar(8000))
DECLARE @Level int
SET @Level=0
INSERT @t_Level SELECT ID,@Level,ID
FROM @t
WHERE PID IS NULL
WHILE @@ROWCOUNT>0
BEGIN
SET @Level=@Level+1
INSERT @t_Level SELECT a.ID,@Level,b.Sort+a.ID
FROM @t a,@t_Level b
WHERE a.PID=b.ID
AND b.Level=@Level-1
END--显示结果
SELECT SPACE(b.Level*2)+'|--'+a.Name
FROM @t a,@t_Level b
WHERE a.ID=b.ID
ORDER BY b.Sort
/*--结果
|--山东省
|--烟台市
|--招远市
|--青岛市
|--四会市
|--清远市
|--小分市
--*/
-----------------------------------------
static DataTable table = new DataTable();
static DataRow MyRow;
ublic static DataTable GetCategoryTree(WebInfoBase info)
{
DataTable dt = info.List(_DefaultDB, "", "[ID],[Title],[ParentID],[ChildNum],[Depth],[OrderNo]", "&version=", "[ID] ASC");
if (table.Rows.Count > 0)
{
table.Columns.Clear();
table.Rows.Clear();
}
CreateDataTable();
GetTree(dt, "0", 0);
return table;
}
public static void GetTree(DataTable dt, string pid, int blank)
{
string str = " ";
DataView dv = new DataView(dt);
dv.RowFilter = "ParentID = " + pid;
if (blank > 0)
{
string s = "";
if (blank == 1)
{
str = "├";
}
for (int i = 2; i <= blank; i++)
{
s = s + " | "+" "+" - ";
}
str = s + "├";
}
foreach (DataRowView drv in dv)
{
string id = drv["ID"].ToString();
string Title = drv["Title"].ToString();
string OrderNo = drv["OrderNo"].ToString();
string ParentID = drv["ParentID"].ToString();
string Depth = drv["Depth"].ToString();
string ChildNum = drv["ChildNum"].ToString();
MyRow = table.NewRow();
MyRow["ID"] = int.Parse(id);
MyRow["Title"] = str + Title;
MyRow["OrderNo"] = int.Parse(OrderNo);
MyRow["ParentID"] = int.Parse(ParentID);
MyRow["Depth"] = int.Parse(Depth);
MyRow["ChildNum"] = int.Parse(ChildNum);
table.Rows.Add(MyRow);
int n = int.Parse(Depth);
//if (n <= 1)
//{
n++;
//}
GetTree(dt, id, n);
}
}
public static void CreateDataTable()
{
table.Columns.Clear();
column = new DataColumn();
column.DataType = System.Type.GetType("System.Int32");
column.ColumnName = "ID";
table.Columns.Add(column);
column = new DataColumn();
column.DataType = System.Type.GetType("System.Int32");
column.ColumnName = "ParentID";
table.Columns.Add(column);
column = new DataColumn();
column.DataType = Type.GetType("System.String");
column.ColumnName = "Title";
table.Columns.Add(column);
column = new DataColumn();
column.DataType = Type.GetType("System.Int32");
column.ColumnName = "ChildNum";
table.Columns.Add(column);
column = new DataColumn();
column.DataType = Type.GetType("System.Int32");
column.ColumnName = "Depth";
table.Columns.Add(column);
column = new DataColumn();
column.DataType = Type.GetType("System.Int32");
column.ColumnName = "OrderNo";
table.Columns.Add(column);
//table.Columns.Clear();
}
http://blog.csdn.net/ws_hgo/archive/2009/01/21/3846843.aspx
{
BindJG();
}
}
private void BindJG()
{
DataSet ds = new DataSet();
//查询数据
DataTable dtb = ds.Tables[0];
TreeNode root = new TreeNode();
root.Value = "0";
root.Text = "";
root.ImageUrl = "../images/folder.gif";
root.Expanded = true;
this.TreeView1.Nodes.Add(root);
initTree(dtb, "", root);
this.TreeView1.ExpandAll();
}
protected void initTree(DataTable dt, string nFatherid, TreeNode fatherNode)
{
DataView dv = new DataView(dt); if (nFatherid == "")
dv.RowFilter = "depth='1'";
else
dv.RowFilter = "shangjjgbh='"+nFatherid+"'";
foreach (DataRowView Row in dv)
{
TreeNode node = new TreeNode();
if (fatherNode.Value == "0")//根节点
{
node.Value = Row["XTBH"].ToString();
node.Text = Row["mc"].ToString();
node.NavigateUrl = "";
node.ImageUrl = "../images/folder.gif";
fatherNode.ChildNodes.Add(node);
initTree(dt, Row["XTBH"].ToString(), node);//递归
}
else
{
node.Text = Row["mc"].ToString();
node.Value = Row["XTBH"].ToString();
node.ImageUrl = "../images/jg.gif";
fatherNode.ChildNodes.Add(node); }
} }递归绑定
{
string temp = "";
if (!IsPostBack)
{
string sqlstr = "exec tbtree @temp=''";
DataSet myds = webcls.statDs(sqlstr);
pubdt = myds .Tables [0];
DataTable tempdt = pubdt.Copy();
DataView dv = new DataView(tempdt );
temp = ddlks.SelectedValue;
dv.RowFilter = " depname = '"+temp +"'";
if (dv.Count > 0)
{
foreach (DataRowView mydrv in dv)
{
string depatname = mydrv["depname"].ToString().Trim();
treeItem.Nodes.Add(new TreeNode(depatname ));
poptree(depatname, treeItem.Nodes[0], mydrv);
}
}
}
} private void poptree(string parentPart, TreeNode parentNode, DataRowView parentRow)
{
string strdepname = "";
DataTable tempdt = pubdt.Copy();
DataView dv = new DataView(tempdt );
dv.RowFilter = "parentid = '" + parentRow["depid"].ToString().Trim() + "'";
foreach (DataRowView myrow in dv )
{
strdepname = myrow["depname"].ToString().Trim();
TreeNode mynode = new TreeNode(strdepname );
parentNode.ChildNodes.Add(mynode );
poptree(strdepname ,mynode,myrow );
}
}