希望高手能够递归的写出一段以GUID为主键的树形结构 能够动态删除 增加节点 拜托了 小弟解决不了了 不是INT类型!
数据库的表我暂时不提供 写出例子 我琢磨下!
数据库的表我暂时不提供 写出例子 我琢磨下!
解决方案 »
- asp.net怎么把数据动态加载到一个xml文档中然后把文档保存的本地
- 用linq绑定Repeater后问题
- 关于asp.net + JQuery + JSON
- 验证整个项目的输入字符串
- 动态的显示类似新浪体育的首页新闻图片切换效果
- 求一个除了中文外其他字符都能输入的正则表达式
- 十万火急,用XML构建组织结构图
- 點擊datagrid中的一行,請問怎樣使程序開啟一個新的網頁?
- c# 操作exchange 问题 急!!!
- 我想请问一下,当panel显示时如果下面有<select >控件是,这个控件不被盖住,结果好象panel破了下一样,请问题怎么办!谢谢
- 谁给个C语言的编程工具链接或直接发给我邮箱
- 动态更换母版页怎么换?
只能表示关注了
GUID NodeID PNodeID NodeContent NavigateUrl
只要使用NodeID和PNodeID进行递归不可以嘛,很多这样的例子嘛
{
SqlConnection myconn = new SqlConnection();
myconn.ConnectionString = "server=.;database=baoming;uid=sa;pwd=admin";
myconn.Open(); //连接数据库
SqlDataAdapter sda = new SqlDataAdapter("select * from treeview where tree_class = 1", myconn); //读取根节点数据
DataSet ds = new DataSet();
sda.Fill(ds);
for (int i = 0;i<ds.Tables[0].Rows.Count;i++) //遍历根节点数量
{
SqlDataAdapter sda2 = new SqlDataAdapter("select * from treeview where tree_lei = '" + ds.Tables[0].Rows[i]["tree_id"].ToString() + "'", myconn); //读取子节点数据
DataSet ds2 = new DataSet();
sda2.Fill(ds2);
TreeNode node = new TreeNode();
node.Text = ds.Tables[0].Rows[i]["tree_name"].ToString(); //填充根节点数据
for (int j = 0; j < ds2.Tables[0].Rows.Count; j++) //遍历第一级子结点数量
{
TreeNode newnode = new TreeNode();
newnode.Text = ds2.Tables[0].Rows[j]["tree_name"].ToString(); //填充子节点数据
newnode.NavigateUrl = ds2.Tables[0].Rows[j]["tree_url"].ToString();
node.ChildNodes.Add(newnode); //将子节点添加到父节点下
}
TreeView2.Nodes.Add(node); //填充treeview
}
myconn.Close();
}
{
DataView dv = new DataView();
TreeNode tmpNd = null;
dv.Table = ds.Tables[0];
dv.RowFilter = String.Format("parentid={0}", parentid);
foreach (DataRowView drv in dv)
{
tmpNd = new TreeNode();
tmpNd.Text = (string)drv["sortname"];//节点名称
tmpNd.NavigateUrl = String.Format("?id={0}", drv["id"]);//节点URL
//tmpNd.ImageUrl = ""; //节点图片
if (parentid == 0)
tmpNd.Expanded = true;
else
tmpNd.Expanded = false;
Nds.Add(tmpNd);
InitTree(Nds[Nds.Count - 1].ChildNodes, (int)drv["id"]);
}
}
参考
while @rowcount!=0
内连接求子节点
具体我也忘记了
- - 你们谁做做好事 自己试一下贴代码我看看 字段暂时给你们folderid foldername paretid
2个ID都是GUID 类型 pID默认null(根节点)
create table cate
(
folderid uniqueidentifier not null,
foldername nvarchar(80),
paretid uniqueidentifier
)declare @a1 uniqueidentifier, @a2 uniqueidentifier, @a3 uniqueidentifier
set @a1 = NEWID()
set @a2 = NEWID()
set @a3 = NEWID()insert into cate select @a1,' 部门1',null union all
select @a2,' 部门2',null union all
select @a3,' 部门3',null union all
select NEWID(),' 部门1-1',@a1 union all
select NEWID(),' 部门1-2',@a1 union all
select NEWID(),' 部门2-1',@a2 union all
select NEWID(),' 部门2-2',@a2 union all
select NEWID(),' 部门3-1',@a3 union all
select NEWID(),' 部门3-2',@a3 private DataTable dt;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
dt = GetTree();
ForEachTree(null);
}
} protected void ForEachTree(TreeNode prevNode)
{
DataView dv = dt.DefaultView;
dv.RowFilter = prevNode == null ? "paretid is null" : "paretid = '" + prevNode.Value + "'";
foreach (DataRowView item in dv)
{
TreeNode tn = new TreeNode();
tn.Text = item["foldername"].ToString();
tn.Value = item["folderid"].ToString();
if (prevNode == null)
{
TreeView1.Nodes.Add(tn);
}
else
{
prevNode.ChildNodes.Add(tn);
}
ForEachTree(tn);
}
} protected DataTable GetTree()
{
DataTable dt = new DataTable();
using (SqlConnection conn = new SqlConnection("server=.;user id=sa;pwd=111;database=master;"))
{
conn.Open();
SqlCommand cmd = new SqlCommand("select * from cate", conn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
}
return dt;
}
tn.Text = item["foldername"].ToString();
修改为
tn.Text = string.Format("{0} <a href=javascript:add('{1}')>添加</a> <a href=javascript:del('{1}')>删除</a>", item["foldername"].ToString(), item["folderid"].ToString());即调用两个js方法,然后编写js方法,以ajax的方式来操作,后续操作你自己实践一下