TreeView怎样无限递归绑定数据(用C#语言写),谢谢。。
数据库设计如下500军事0510生活0521健康菜肴51531各国武器50720新闻0731国内72751国外72840uuu0852aaa52863bbb85...
数据库设计如下
50 0 军事 0
51 0 生活 0
52 1 健康菜肴 51
53 1 各国武器 50
72 0 新闻 0
73 1 国内 72
75 1 国外 72
84 0 uuu 0
85 2 aaa 52
86 3 bbb 85 展开
50 0 军事 0
51 0 生活 0
52 1 健康菜肴 51
53 1 各国武器 50
72 0 新闻 0
73 1 国内 72
75 1 国外 72
84 0 uuu 0
85 2 aaa 52
86 3 bbb 85 展开
4个回答
展开全部
我把我以前用的表结构先介绍下
表主要用来保存权限分类的
字段 PopId 权限ID 主键
PopName 权限名字
PostUrl 链接到的URL
flid 父节点ID
其中 根节点的flid为0 其他的父节点根据情况填写
页面实现的时候 直接 添加treeview控件
cs代码如下
protected void Page_Load(object sender, EventArgs e)
{
bindtree(PopId);
}
private void bindtree()
{
TreeView1.Nodes.Clear();
AddTree(0, (TreeNode)null);
}
public void AddTree(int ParentID, TreeNode pNode)
{
DataTable dt = new DataTable();
//这个是我获取数据源的代码
dt = logbll.BindPop();
DataView dvTree = new DataView(dt);
//过滤ParentID,得到当前的所有子节点
dvTree.RowFilter = "flid = " + ParentID;
foreach (DataRowView Row in dvTree)
{
TreeNode Node = new TreeNode();
if (pNode == null)
{ //添加根节点
Node.Text = Row["PopName"].ToString();
TreeView1.Nodes.Add(Node);
//Node.Expanded = true;
AddTree(Int32.Parse(Row["PopId"].ToString()), Node); //再次递归
}
else
{ //添加当前节点的子节点
Node.Text = Row["PopName"].ToString();
Node.NavigateUrl = Row["PostUrl"].ToString();
pNode.ChildNodes.Add(Node);
//Node.Expanded = true;
AddTree(Int32.Parse(Row["PopId"].ToString()), Node); //再次递归
}
}
}
你可以根据你的表来修改相应的字段名,下班了,没时间帮你写完整的了,代码能用,有什么问题明天再解决吧
表主要用来保存权限分类的
字段 PopId 权限ID 主键
PopName 权限名字
PostUrl 链接到的URL
flid 父节点ID
其中 根节点的flid为0 其他的父节点根据情况填写
页面实现的时候 直接 添加treeview控件
cs代码如下
protected void Page_Load(object sender, EventArgs e)
{
bindtree(PopId);
}
private void bindtree()
{
TreeView1.Nodes.Clear();
AddTree(0, (TreeNode)null);
}
public void AddTree(int ParentID, TreeNode pNode)
{
DataTable dt = new DataTable();
//这个是我获取数据源的代码
dt = logbll.BindPop();
DataView dvTree = new DataView(dt);
//过滤ParentID,得到当前的所有子节点
dvTree.RowFilter = "flid = " + ParentID;
foreach (DataRowView Row in dvTree)
{
TreeNode Node = new TreeNode();
if (pNode == null)
{ //添加根节点
Node.Text = Row["PopName"].ToString();
TreeView1.Nodes.Add(Node);
//Node.Expanded = true;
AddTree(Int32.Parse(Row["PopId"].ToString()), Node); //再次递归
}
else
{ //添加当前节点的子节点
Node.Text = Row["PopName"].ToString();
Node.NavigateUrl = Row["PostUrl"].ToString();
pNode.ChildNodes.Add(Node);
//Node.Expanded = true;
AddTree(Int32.Parse(Row["PopId"].ToString()), Node); //再次递归
}
}
}
你可以根据你的表来修改相应的字段名,下班了,没时间帮你写完整的了,代码能用,有什么问题明天再解决吧
展开全部
给你贴几行代码,自己参考一下
private void TreeViewLoad()
{
//全部のノードクリア
this.tvwItem.Nodes.Clear();
//登录件数を取得します
itemCount = dataTable.Rows.Count;
//トップノードを设定します
this.tvwItem.Nodes.Add("0", mAItemSystemCode + " " + mAItemSystemName);
this.tvwItem.Nodes[0].ImageIndex = 0;
this.tvwItem.Nodes[0].SelectedImageIndex = 1;
this.tvwItem.TopNode.BackColor = System.Drawing.Color.Silver;
//ノードを添加する
treeViewNodeAdd("0", this.tvwItem.Nodes[0]);
//全展开
this.tvwItem.ExpandAll();
}
private void treeViewNodeAdd(string parentID, TreeNode parentNode)
{
DataRow[] rows = dataTable.Select("ParentID=" + parentID);
foreach (DataRow row in rows)
{
treeNode.Name = mAItemID;
treeNode.Text = maItemCode + " " + maItemName;
//ノードを添加する
parentNode.Nodes.Insert(orderNo, treeNode);
//子ノードを添加する
treeViewNodeAdd(mAItemID, treeNode);//递归循环添加子node
}
}
如果数据太多,读取太慢的话
在TreeViewLoad()里面,第一行写上
this.tvwItem.BeginUpdate();
最后一行写上
this.tvwItem.EndUpdate();
可以加快刷新速度
private void TreeViewLoad()
{
//全部のノードクリア
this.tvwItem.Nodes.Clear();
//登录件数を取得します
itemCount = dataTable.Rows.Count;
//トップノードを设定します
this.tvwItem.Nodes.Add("0", mAItemSystemCode + " " + mAItemSystemName);
this.tvwItem.Nodes[0].ImageIndex = 0;
this.tvwItem.Nodes[0].SelectedImageIndex = 1;
this.tvwItem.TopNode.BackColor = System.Drawing.Color.Silver;
//ノードを添加する
treeViewNodeAdd("0", this.tvwItem.Nodes[0]);
//全展开
this.tvwItem.ExpandAll();
}
private void treeViewNodeAdd(string parentID, TreeNode parentNode)
{
DataRow[] rows = dataTable.Select("ParentID=" + parentID);
foreach (DataRow row in rows)
{
treeNode.Name = mAItemID;
treeNode.Text = maItemCode + " " + maItemName;
//ノードを添加する
parentNode.Nodes.Insert(orderNo, treeNode);
//子ノードを添加する
treeViewNodeAdd(mAItemID, treeNode);//递归循环添加子node
}
}
如果数据太多,读取太慢的话
在TreeViewLoad()里面,第一行写上
this.tvwItem.BeginUpdate();
最后一行写上
this.tvwItem.EndUpdate();
可以加快刷新速度
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
private void GetExPloitationNode(String TypeID, DataSet ds)
{
DataView dv = new DataView(ds.Tables[0]);
dv.RowFilter = "sExploitationTypeID='" + TypeID + "' and sMasterID='" + MasterID + "'";
dv.Sort = CRED_ExploitationIndexTable.C_iDisplayOrder;
if (dv.Count > 0)
{
foreach (DataRowView drow in dv)
{
TreeView tv = new TreeView();
TreeNode NewNode = new TreeNode();
NewNode.Text = drow[CRED_ExploitationIndexTable.C_sExploitationIndex].ToString();
NewNode.Value = drow[CRED_ExploitationIndexTable.C_sExploitationID].ToString();
tv.Nodes.Add(NewNode);
tv.EnableClientScript = false;
tv.ShowCheckBoxes = TreeNodeTypes.All;
tv.ShowLines = true;
tv.EnableViewState = true;
ListSubModule(NewNode, TypeID);
}
}
}
private void ListSubModule(TreeNode nodeParent, String TypeID)
{
DataView dv = new DataView(AllIndex.Tables[0]);
dv.Sort = CRED_ExploitationIndexTable.C_iDisplayOrder;
String nodeID = nodeParent.Value.Trim();
dv.RowFilter = "sExploitationTypeID='" + TypeID + "' and sMasterID='" + nodeID + "'";
foreach (DataRowView drow in dv)
{
TreeNode nodeChild = new TreeNode();
nodeChild.Text = drow[CRED_ExploitationIndexTable.C_sExploitationIndex].ToString();
nodeChild.Value = drow[CRED_ExploitationIndexTable.C_sExploitationID].ToString();
nodeParent.ChildNodes.Add(nodeChild);
this.ListSubModule(nodeChild, TypeID);
}
}
大致就是这个样子的!思路很清晰的!没时间根据你的表改!
就是一个递归!
{
DataView dv = new DataView(ds.Tables[0]);
dv.RowFilter = "sExploitationTypeID='" + TypeID + "' and sMasterID='" + MasterID + "'";
dv.Sort = CRED_ExploitationIndexTable.C_iDisplayOrder;
if (dv.Count > 0)
{
foreach (DataRowView drow in dv)
{
TreeView tv = new TreeView();
TreeNode NewNode = new TreeNode();
NewNode.Text = drow[CRED_ExploitationIndexTable.C_sExploitationIndex].ToString();
NewNode.Value = drow[CRED_ExploitationIndexTable.C_sExploitationID].ToString();
tv.Nodes.Add(NewNode);
tv.EnableClientScript = false;
tv.ShowCheckBoxes = TreeNodeTypes.All;
tv.ShowLines = true;
tv.EnableViewState = true;
ListSubModule(NewNode, TypeID);
}
}
}
private void ListSubModule(TreeNode nodeParent, String TypeID)
{
DataView dv = new DataView(AllIndex.Tables[0]);
dv.Sort = CRED_ExploitationIndexTable.C_iDisplayOrder;
String nodeID = nodeParent.Value.Trim();
dv.RowFilter = "sExploitationTypeID='" + TypeID + "' and sMasterID='" + nodeID + "'";
foreach (DataRowView drow in dv)
{
TreeNode nodeChild = new TreeNode();
nodeChild.Text = drow[CRED_ExploitationIndexTable.C_sExploitationIndex].ToString();
nodeChild.Value = drow[CRED_ExploitationIndexTable.C_sExploitationID].ToString();
nodeParent.ChildNodes.Add(nodeChild);
this.ListSubModule(nodeChild, TypeID);
}
}
大致就是这个样子的!思路很清晰的!没时间根据你的表改!
就是一个递归!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
什么无限递归 说清楚点
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询