C# treeview 递归绑定数据

C# treeview 递归绑定数据,第1张

{

SqlDataAdapter adp= new SqlDataAdapter("select * from tb_table", connString)

DataTable dtData=new DataTable()

adp.Fill(dtData)

TreeView tv//树控件

tv.Nodes.Clear()

// 获得第一级数据

DataRow[] drRoot=dtData.Select("len(varid)=3")

foreach(DataRow dr in drRoot)

{

TreeNode tn=new TreeNode()

tn.Text=dr["Name"].ToString()

AppendChild(tn,dr["varid"].ToString())

tv.Nodes.Add(tn)

}

}

// 递归绑定数据

Private void AppendChild(TreeNode tnParent,string varid)

{

DataRow[] drs=dtData.Select("substring(varid,0,"+varid.length+" and len(varid)="+varid.length+3))

foreach(DataRow dr in drs)

{

TreeNode tn=new TreeNode()

tn.Text=dr["Name"].ToString()

AppendChild(tn,dr["varid"].ToString())

tnParent.ChildNodes.Add(tn)

}

}

大概意思就是这样,自己拿去修改一了试试看

///

///

动态绑定TreeView,递归

///

///

要绑定到的TreeView控件名称

///

准备绑定到TreeView控件的数据DataTable的名称

///

分级条件id,顶级分类ID为0

///

上级TreeNode节点名称,没有上级节点或或全新绑定这里写(TreeNode)null

///

节点的分级条件在数据库中的字段

///

节点绑定的显示的文本在数据库中的字段

///

节点绑定的Tag值在数据库中的字段

public

static

void

bind_treeview(TreeView

tv,

DataTable

dt,

int

Filterid,

TreeNode

node,string

Node_FLZD,string

NodeText_ZD,string

NodeTag_ZD)//绑定treeView的方法。

{

DataView

subView

=

dt.DefaultView

subView.RowFilter

=

Node_FLZD

+

"="

+

Filterid

//获得ID级别为当前ID的

foreach

(DataRowView

item

in

subView)

{

//如果上级ID为0就直接加载树下面

if

(Filterid

==

0)

{

TreeNode

treenodel

=

new

TreeNode()

//创建一个节点

treenodel.Text

=

item[NodeText_ZD].ToString()

//节点名称

int

id

=

Convert.ToInt32(item[NodeTag_ZD])

treenodel.Tag

=

id.ToString()

//节点值

tv.Nodes.Add(treenodel)

//

如果级别ID为0就直接加到根节点

bind_treeview(tv,

dt,

id,

treenodel,

Node_FLZD,

NodeText_ZD,

NodeTag_ZD)

//

递归调用

}

else

{

//不为0就加载传进来的子节点下

TreeNode

treenodel

=

new

TreeNode()

treenodel.Text

=

item[NodeText_ZD].ToString()

int

id

=

Convert.ToInt32(item[NodeTag_ZD])

treenodel.Tag

=

id.ToString()

treenodel.ExpandAll()

node.Nodes.Add(treenodel)

//把节点加入到当前节点下,

bind_treeview(tv,

dt,

id,

treenodel,

Node_FLZD,

NodeText_ZD,

NodeTag_ZD)

}

}

}

既然是递归,就有父节点子节点,首先数据库是这样设计的

比如机构表 :根节点 省公安厅,市公安厅是这个省公安厅的,所以ParentID为省公安厅的ID,县公安厅的ParentID为对应市公安厅的ID

下面例子是B/S树的一段代码:

//组织机构下的子机构

var clientOrgUnit = Psap.WcfProxy.CenterServiceFactory.CreateOrgUnitServiceClient()

var orgUnits = clientOrgUnit.GetOrgUnitModelList("ParentId=" + parentID)//根据父节点ID找到下面的所有子节点

clientOrgUnit.Close()

foreach (var model in orgUnits) //遍历根节点下面的机构

{

ComponentArt.Web.UI.TreeViewNode node = new ComponentArt.Web.UI.TreeViewNode()

node.Text = model.Name

node.Value = Psap.Common.Enums.ObjectType.OrgUnit + "_" + model.ID

node.Expanded = false

node.ImageUrl = _ORGUNIT_IMAGE

node.ToolTip = model.Name

//node.ExpandedImageUrl = "folder_open.gif"

node.Selectable = false

String url = String.Format("View/TreeViewUrl.aspx?parentID={0}&childType=1", Server.UrlEncode(model.ID.ToString()))

node.ContentCallbackUrl = url

TreeView1.Nodes.Add(node)

}

这段代码每次都会发送请求到TreeViewUrl.aspx,然后得到ParentID找到子节点下面的子节点。

还一种递归的方式更容易理解:

如下面代码:

/// <summary>

/// 递归的创建子节点

/// </summary>

/// <param name="node"></param>

void AddChild(Microsoft.Web.UI.WebControls.TreeNode node)

{

Microsoft.Web.UI.WebControls.TreeNode node1

string p_id = node.ID

DataSet ds = DeptBll.GetUFList("supId =" + p_id)

for (int i = 0i <ds.Tables[0].Rows.Counti++)

{

node1 = new Microsoft.Web.UI.WebControls.TreeNode()

node1.ID = ds.Tables[0].Rows[i]["deptId"].ToString()

node1.Text = ds.Tables[0].Rows[i]["deptName"].ToString()

node1.NodeData = ds.Tables[0].Rows[i]["nlevel"].ToString() + "@" + ds.Tables[0].Rows[i]["deptType"].ToString() + "@" + ds.Tables[0].Rows[i]["code"].ToString()

node.Nodes.Add(node1)

AddChild(node1)

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9652994.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存