动态绑定treeview

一、 页面

<asp:TreeView ID="tvNvg" runat="server"  onselectednodechanged="tvNvg_SelectedNodeChanged" 

</asp:TreeView> 

二、后台

 

代码
protected void BindTree()
{
this.tvNvg.Nodes.Clear();

DataTable dt
= bll.GetAllNavigations();
TreeNode treeRoot
= new TreeNode();
treeRoot.Text
= "Navigation";
treeRoot.Value
= "0";
treeRoot.Expanded
= true;

foreach (DataRow dr in dt.Rows)
{
int iParentId = int.Parse(dr["parentId"].ToString());
int iChildId = int.Parse(dr["id"].ToString());
string strNodeName = dr["name"].ToString();
string strNavigationUrl = dr["url"].ToString();
TreeNode node
= new TreeNode();

if (iParentId == 0)
{
node.Text
= strNodeName;
node.Value
= iChildId.ToString();
node.NavigateUrl
= strNavigationUrl;
treeRoot.ChildNodes.Add(node);
}

BindChildTree(iChildId, node, strNodeName,strNavigationUrl, dt);

}
this.tvNvg.Nodes.Add(treeRoot);
}
public void BindChildTree(int iChildId, TreeNode node, string strNodeName,string strNavigation, DataTable dv)
{
node.Value
= iChildId.ToString();
node.Text
= strNodeName;
node.NavigateUrl
= strNavigation;
foreach (DataRow dr in dv.Rows)
{

int _parentId = int.Parse(dr["parentId"].ToString());
int _childId = int.Parse(dr["id"].ToString());
string _childNodeName = dr["name"].ToString();
string _navigation = dr["url"].ToString();

TreeNode childNode
= new TreeNode();
childNode.Value
= _childId.ToString();
childNode.Text
= _childNodeName;
childNode.NavigateUrl
= _navigation;
if (_parentId == iChildId)
{
node.ChildNodes.Add(childNode);
BindChildTree(_childId, childNode, _childNodeName, _navigation, dv);
}
}

}

public static void AddChildNode(DropDownList ddr, DataTable dt, string strParentCode, string s)
{
DataView dv
= new DataView(dt);
dv.RowFilter
= "parentId=" + strParentCode;
foreach (DataRowView dr in dv)
{
ddr.Items.Add(
new ListItem(s + ">>" + dr["name"].ToString(), dr["id"].ToString()));
AddChildNode(ddr, dt, dr[
"id"].ToString(), s + ">>" + dr["name"].ToString());
}
}

 

 

给 TreeView 添加 “点击”,“双击”,“右击”等JS事件

 

 

代码
在asp.net 中,自2005以后,vs就增加了这个控件,但事件单一,不能满足我们特殊或者说是大部分功能,

比如,经常使用的单位下部分选人的功能,用树目录肯定是最好的选择了,结构清晰,但它只支持鼠标单击事件,如果双击,或右击等事件咋加呢?请看下面:(其实很简单)

当我们用程序绑定控件的时候,新建立的是treenode节点,我们就在这加了,treenode有个text属性,就是显示节点标题了,但荣幸的事这个可以支持html标记,你想到了什么呢?哈哈

//////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

cs代码:

TreeNode subnode
= new TreeNode("<a href='#' onDblClick=\"abc('"+mydata["n_name"].ToString()+"')\">"+mydata["n_name"].ToString()+"</a>", mydata["n_node"].ToString());

//////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

前台的abc()js方法

function abc(aa)
{
alert(aa);
}


//////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

posted @ 2010-04-27 09:33  Sue_娜  阅读(408)  评论(0编辑  收藏  举报