一棵部门树(晚上来结帖) 我想这个功能大家肯定都有遇到过!就是从数据库读出来绑定到一棵树形菜单上!带有复选框的要怎么实现啊!有代码写代码哟最好有实例哟本人比较笨啊!谢谢各位的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 TreeView就可以呀http://wenwen.soso.com/z/q193195692.htmhttp://www.tzwhx.com/newOperate/html/1/11/115/20786.html属性可以设置是否显示CheckBox using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Data;namespace WebApp { public partial class TreeViewSample : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { TreeView1.ShowCheckBoxes = TreeNodeTypes.All; if (!IsPostBack) { CreateData(); BindTree(dtlModel.Select("pid='0'"), null); ////父子节点联动 //TreeView1.Attributes.Add("onclick", "OnTreeNodeChecked(event)"); ////获取节点值 TreeView1.Attributes.Add("onclick", "getHideValue(event)"); DataView dv1 = dtlModel.DefaultView; dv1.RowFilter = "id=1"; DataView dv2 = dtlModel.Copy().DefaultView; dv2.RowFilter = "id=2"; } } DataTable dtlModel = new DataTable(); private void CreateData() { dtlModel.Columns.Add("id", typeof(Int32)); dtlModel.Columns.Add("pid", typeof(Int32)); dtlModel.Columns.Add("name"); for (int i = 1; i < 6; i++) { DataRow dr = dtlModel.NewRow(); dr["id"] = i; dr["pid"] = 0; dr["name"] = i.ToString(); dtlModel.Rows.Add(dr); for (int j = 1; j < 6; j++) { DataRow dr1 = dtlModel.NewRow(); dr1["id"] = int.Parse(i.ToString() + j.ToString()); dr1["pid"] = i; dr1["name"] = i + "_" + j; dtlModel.Rows.Add(dr1); for (int k = 1; k < 6; k++) { DataRow dr2 = dtlModel.NewRow(); dr2["id"] = int.Parse(i.ToString() + j.ToString() + k.ToString()); dr2["pid"] = dr1["id"]; dr2["name"] = i + "_" + j + "_" + k; dtlModel.Rows.Add(dr2); } } } } private void BindTree(DataRow[] rows, TreeNode node) { foreach (DataRow r in rows) { if (r["pid"] == DBNull.Value) continue; //如果是根结点,添加到TreeView控件 if (r["pid"].ToString() == "0") { TreeNode node1 = new TreeNode(); node1.Text = string.Format("<input name='hd_{0}' type='hidden' value='{1}'/>{2}", r["id"], r["id"], r["name"].ToString()); node1.Value = r["id"].ToString(); //node1.Target = "top"; TreeView1.Nodes.Add(node1); BindTree(dtlModel.Select("pid=" + r["id"]), node1); } else if (node != null) {//否则添加到当前结点 TreeNode node1 = new TreeNode(); node1.Text = string.Format("<input name='hd_{0}' type='hidden' value='{1}'/>{2}", r["id"], r["id"], r["name"].ToString()); node1.Value = r["id"].ToString(); //node1.Target = "top"; node.ChildNodes.Add(node1); BindTree(dtlModel.Select("pid=" + r["id"]), node1);//递归生成子树 } } } protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e) { Response.Write("aaa"); } protected void TreeView2_TreeNodeDataBound(object sender, TreeNodeEventArgs e) { e.Node.NavigateUrl = string.Format("project.aspx?projectnum=", e.Node.Value); } }}<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TreeViewSample.aspx.cs" Inherits="WebApp.TreeViewSample" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title>treeview父子节点联动</title> <script type="text/javascript"> function OnTreeNodeChecked(evt) { var objNode = evt.srcElement ? evt.srcElement : evt.target; if (objNode.checked == true) { alert(getHideValue(objNode)); setParentChecked(objNode); var objID = objNode.getAttribute("ID"); var objID = objID.substring(0, objID.indexOf("CheckBox")); var objParentDiv = document.getElementById(objID + "Nodes"); if (objParentDiv != null && objParentDiv != "undefined") { setChildChecked(objParentDiv); } } else { var objID = objNode.getAttribute("ID"); var objID = objID.substring(0, objID.indexOf("CheckBox")); var objParentDiv = document.getElementById(objID + "Nodes"); if (objParentDiv != null && objParentDiv != "undefined") { setChildUnChecked(objParentDiv); } } if (objNode.tagName && objNode.tagName != "INPUT") { if (objNode.tagName == "IMG") { return true; } else { if (window.event) { window.event.returnValue = false; return false; } else { evt.preventDefault(); evt.stopPropagation(); } } } } function getParentByTagName(element, tagName) { var parent = element.parentNode; var upperTagName = tagName.toUpperCase(); while (parent && (parent.tagName.toUpperCase() != upperTagName)) { parent = parent.parentNode ? parent.parentNode : parent.parentElement; } return parent; } function setParentChecked(objNode) { var objParentDiv = getParentByTagName(objNode, "div"); if (objParentDiv == null || objParentDiv == "undefined") { return; } var objID = objParentDiv.getAttribute("ID"); objID = objID.substring(0, objID.indexOf("Nodes")); objID = objID + "CheckBox"; var objParentCheckBox = document.getElementById(objID); if (objParentCheckBox == null || objParentCheckBox == "undefined") { return; } if (objParentCheckBox.tagName != "INPUT" && objParentCheckBox.type == "checkbox") return; objParentCheckBox.checked = true; setParentChecked(objParentCheckBox); } function setChildUnChecked(divID) { var objchild = divID.children; var count = objchild.length; for (var i = 0; i < objchild.length; i++) { var tempObj = objchild[i]; if (tempObj.tagName == "INPUT" && tempObj.type == "checkbox") { tempObj.checked = false; } setChildUnChecked(tempObj); } } function setChildChecked(divID) { var objchild = divID.children; var count = objchild.length; for (var i = 0; i < objchild.length; i++) { var tempObj = objchild[i]; if (tempObj.tagName == "INPUT" && tempObj.type == "checkbox") { tempObj.checked = true; } setChildChecked(tempObj); } } function getHideValue(evt) { var node = evt.srcElement ? evt.srcElement : evt.target; if (node.checked == true) { //alert(getParentByTagName(node, "td").innerHTML); var objchild = getParentByTagName(node, "td").getElementsByTagName("input"); for (var i = 0; i < objchild.length; i++) { var tempObj = objchild[i]; if (tempObj.tagName == "INPUT" && tempObj.type == "hidden") { alert(tempObj.value); } } } } </script></head><body> <form id="form1" runat="server"> <div> </div> <asp:TreeView ID="TreeView1" runat="server"> </asp:TreeView> <asp:TreeView ID="TreeView2" runat="server" ShowCheckBoxes="All" OnSelectedNodeChanged="TreeView1_SelectedNodeChanged"> <Nodes> <asp:TreeNode Text="root" Value="root"> <asp:TreeNode Text="a" Value="a"></asp:TreeNode> </asp:TreeNode> </Nodes> </asp:TreeView> </form></html> public string GetInformation(string option, string paparcount) { StringBuilder bd = new StringBuilder(); string sql="获取顶层菜单名称"; DataTable tb = ado.GetDataSet(sql).Tables[0]; bd.Append("<table border=\"0\" cellpadding=\"0\" cellspacing=\"1\" style=\"width: 100%;font-size: 12px;\" bgcolor=\"#666699\" >"); for (int i = 0; i < tb.Rows.Count; i++) {//可以加上checkbox; bd.Append("<tr align=\"left\" bgcolor=\"#E8E8E8\" height=\"23px\">"); bd.Append(" <td width=\"30px\" style=\"text-align: center\">" + tb.Rows[i][0].ToString() + "</td>"); bd.Append("</tr>"); string str = " "; str = "获取次级菜单名称"; DataTable table = ado.GetDataSet(str).Tables[0]; for (int j = 0; j < table.Rows.Count; j++) { bd.Append("<tr align=\"left\" bgcolor=\"#E8E8E8\" height=\"23px\">"); bd.Append(" <td style=\"text-align: center\">" + tb.Rows[j][0].ToString()+ "</td>"); bd.Append("</tr>"); } } bd.Append("</table>"); string information = bd.ToString(); return information; }总体来说就是用循环将数据库读取的内容填充table,然后用字符串串起来付给一个节点显示 楼上的是什么代码啊?怎么那么长啊?看我的!public partial class BindTreeView : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { departList = new List<Department>() { new Department{ ID = 1, ParentID= 0, Name=" 老总"}, new Department{ ID = 2, ParentID= 1, Name=" 市场副总"}, new Department{ ID = 3, ParentID= 1, Name=" 技术副总"}, new Department{ ID = 4, ParentID= 1, Name=" 行政副总"}, new Department{ ID = 5, ParentID= 2, Name=" 市场部"}, new Department{ ID = 6, ParentID= 4, Name=" 财务部"}, new Department{ ID = 7, ParentID= 4, Name=" 行政部"}, new Department{ ID = 8, ParentID= 3, Name=" C#技术部"}, new Department{ ID = 9, ParentID= 3, Name=" JAVA技术部"}, new Department{ ID = 10, ParentID= 9, Name=" J2EE技术部"}, new Department{ ID = 11, ParentID= 9, Name=" J2ME技术部"} }; TreeNode root = new TreeNode(); root.Text = this.departList[0].Name; root.Value = this.departList[0].ID.ToString(); root.Checked = true; this.TreeView1.Nodes.Add(root); this.BindToTree(root); } /// <summary> /// 对象列表 /// </summary> private List<Department> departList; /// <summary> /// 绑定到树 /// </summary> /// <param name="node"></param> private void BindToTree(TreeNode node) { if (node != null) { var temp = from dept in departList where dept.ParentID.ToString() == node.Value select dept; List<Department> tempList = temp.ToList<Department>(); tempList.ForEach(delegate(Department t) { TreeNode tnode = new TreeNode(); tnode.Text = t.Name; tnode.Value = t.ID.ToString(); tnode.Checked = true; node.ChildNodes.Add(tnode); BindToTree(tnode); }); } } } 经典 treeview可以 要是不嫌麻烦就用JS 数据库结构: menuID content parentID 1 一级 0 2 科技 1 3 沈阳 2 4 二级 0 5 美食 4 6 哈尔滨 5 7 三级 0 8 美食 7 9 大连 8 private void LoadTree() { treeView1.Nodes.Clear(); //先清空树 DataTable dt = ds.Tables[0]; //把表结构从数据库查出来放到DataTable中 //循环绑定父节点 foreach (DataRow dr in dt.Rows) { //遍历加载父节点 if (Convert.ToInt32(dr["parentID"]) == 0) { TreeNode newNode = new TreeNode(); newNode.Text = dr["content"].ToString(); newNode.NavigateUrl = "Switch.aspx?id=" + dr["menuID"].ToString(); newNode.Target = "main"; treeView1.Nodes.Add(newNode); ChildLoad(dr, newNode.ChildNodes, dt); } } this.treeView1.ExpandAll(); } //绑定子节点 private void ChildLoad(DataRow dr, TreeNodeCollection newNode, DataTable dt) { foreach (DataRow row in dt.Rows) { if (Convert.ToInt32(dr["menuID"]) == Convert.ToInt32(row["parentID"])) { TreeNode childNode = new TreeNode(); childNode.Text = row["content"].ToString(); childNode.NavigateUrl = "Switch.aspx?id=" + row["menuID"].ToString(); childNode.Target = "main"; newNode.Add(childNode); ChildLoad(row, childNode.ChildNodes, dt); //递归子节点 } } } jQuery Media Plugin 怎么用啊 急死了.... DataTable中的数据(列/行)排序后放入一个新的DataTable asp.net 求得到文本文件的行數 一个布局显示问题在线等!! 请教ASP.NET数据库死活连不上? 中文转换成英文! [求助]请问我想建立2级分类表,怎么办? 新年伊始,接到了一个crm的项目,遇到一个问题,小弟向各位高手请教! 如何在單擊瀏覽器左上角的上一頁下一頁時顯示網頁過期 listbox问题--两个listbox,一个增一个减的问题,急急 C#中使用js Asp.net服务器控件Table增加行的问题
http://wenwen.soso.com/z/q193195692.htm
http://www.tzwhx.com/newOperate/html/1/11/115/20786.html
属性可以设置是否显示CheckBox
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;namespace WebApp {
public partial class TreeViewSample : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
TreeView1.ShowCheckBoxes = TreeNodeTypes.All;
if (!IsPostBack) {
CreateData();
BindTree(dtlModel.Select("pid='0'"), null);
////父子节点联动
//TreeView1.Attributes.Add("onclick", "OnTreeNodeChecked(event)"); ////获取节点值
TreeView1.Attributes.Add("onclick", "getHideValue(event)"); DataView dv1 = dtlModel.DefaultView;
dv1.RowFilter = "id=1";
DataView dv2 = dtlModel.Copy().DefaultView;
dv2.RowFilter = "id=2";
}
} DataTable dtlModel = new DataTable();
private void CreateData() {
dtlModel.Columns.Add("id", typeof(Int32));
dtlModel.Columns.Add("pid", typeof(Int32));
dtlModel.Columns.Add("name"); for (int i = 1; i < 6; i++) {
DataRow dr = dtlModel.NewRow();
dr["id"] = i;
dr["pid"] = 0;
dr["name"] = i.ToString();
dtlModel.Rows.Add(dr);
for (int j = 1; j < 6; j++) {
DataRow dr1 = dtlModel.NewRow();
dr1["id"] = int.Parse(i.ToString() + j.ToString());
dr1["pid"] = i;
dr1["name"] = i + "_" + j;
dtlModel.Rows.Add(dr1);
for (int k = 1; k < 6; k++) {
DataRow dr2 = dtlModel.NewRow();
dr2["id"] = int.Parse(i.ToString() + j.ToString() + k.ToString());
dr2["pid"] = dr1["id"];
dr2["name"] = i + "_" + j + "_" + k;
dtlModel.Rows.Add(dr2);
}
}
}
} private void BindTree(DataRow[] rows, TreeNode node) {
foreach (DataRow r in rows) {
if (r["pid"] == DBNull.Value)
continue; //如果是根结点,添加到TreeView控件
if (r["pid"].ToString() == "0") {
TreeNode node1 = new TreeNode();
node1.Text = string.Format("<input name='hd_{0}' type='hidden' value='{1}'/>{2}", r["id"], r["id"], r["name"].ToString());
node1.Value = r["id"].ToString();
//node1.Target = "top";
TreeView1.Nodes.Add(node1);
BindTree(dtlModel.Select("pid=" + r["id"]), node1);
}
else if (node != null) {//否则添加到当前结点
TreeNode node1 = new TreeNode();
node1.Text = string.Format("<input name='hd_{0}' type='hidden' value='{1}'/>{2}", r["id"], r["id"], r["name"].ToString());
node1.Value = r["id"].ToString();
//node1.Target = "top";
node.ChildNodes.Add(node1);
BindTree(dtlModel.Select("pid=" + r["id"]), node1);//递归生成子树
}
}
} protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e) {
Response.Write("aaa");
} protected void TreeView2_TreeNodeDataBound(object sender, TreeNodeEventArgs e) {
e.Node.NavigateUrl = string.Format("project.aspx?projectnum=", e.Node.Value);
} }
}
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TreeViewSample.aspx.cs"
Inherits="WebApp.TreeViewSample" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>treeview父子节点联动</title> <script type="text/javascript"> function OnTreeNodeChecked(evt) {
var objNode = evt.srcElement ? evt.srcElement : evt.target; if (objNode.checked == true) {
alert(getHideValue(objNode));
setParentChecked(objNode);
var objID = objNode.getAttribute("ID");
var objID = objID.substring(0, objID.indexOf("CheckBox"));
var objParentDiv = document.getElementById(objID + "Nodes");
if (objParentDiv != null && objParentDiv != "undefined") {
setChildChecked(objParentDiv);
}
}
else {
var objID = objNode.getAttribute("ID");
var objID = objID.substring(0, objID.indexOf("CheckBox"));
var objParentDiv = document.getElementById(objID + "Nodes");
if (objParentDiv != null && objParentDiv != "undefined") {
setChildUnChecked(objParentDiv);
}
} if (objNode.tagName && objNode.tagName != "INPUT") {
if (objNode.tagName == "IMG") {
return true;
}
else {
if (window.event) {
window.event.returnValue = false;
return false;
}
else {
evt.preventDefault();
evt.stopPropagation();
}
}
}
} function getParentByTagName(element, tagName) {
var parent = element.parentNode;
var upperTagName = tagName.toUpperCase(); while (parent && (parent.tagName.toUpperCase() != upperTagName)) {
parent = parent.parentNode ? parent.parentNode : parent.parentElement;
}
return parent;
} function setParentChecked(objNode) {
var objParentDiv = getParentByTagName(objNode, "div");
if (objParentDiv == null || objParentDiv == "undefined") {
return;
}
var objID = objParentDiv.getAttribute("ID");
objID = objID.substring(0, objID.indexOf("Nodes"));
objID = objID + "CheckBox";
var objParentCheckBox = document.getElementById(objID);
if (objParentCheckBox == null || objParentCheckBox == "undefined") {
return;
}
if (objParentCheckBox.tagName != "INPUT" && objParentCheckBox.type == "checkbox")
return;
objParentCheckBox.checked = true;
setParentChecked(objParentCheckBox);
} function setChildUnChecked(divID) {
var objchild = divID.children;
var count = objchild.length;
for (var i = 0; i < objchild.length; i++) {
var tempObj = objchild[i];
if (tempObj.tagName == "INPUT" && tempObj.type == "checkbox") {
tempObj.checked = false;
}
setChildUnChecked(tempObj);
}
} function setChildChecked(divID) {
var objchild = divID.children;
var count = objchild.length;
for (var i = 0; i < objchild.length; i++) {
var tempObj = objchild[i];
if (tempObj.tagName == "INPUT" && tempObj.type == "checkbox") {
tempObj.checked = true;
}
setChildChecked(tempObj);
}
} function getHideValue(evt) {
var node = evt.srcElement ? evt.srcElement : evt.target; if (node.checked == true) {
//alert(getParentByTagName(node, "td").innerHTML);
var objchild = getParentByTagName(node, "td").getElementsByTagName("input");
for (var i = 0; i < objchild.length; i++) {
var tempObj = objchild[i];
if (tempObj.tagName == "INPUT" && tempObj.type == "hidden") {
alert(tempObj.value);
}
}
}
}
</script></head>
<body>
<form id="form1" runat="server">
<div>
</div>
<asp:TreeView ID="TreeView1" runat="server">
</asp:TreeView>
<asp:TreeView ID="TreeView2" runat="server" ShowCheckBoxes="All" OnSelectedNodeChanged="TreeView1_SelectedNodeChanged">
<Nodes>
<asp:TreeNode Text="root" Value="root">
<asp:TreeNode Text="a" Value="a"></asp:TreeNode>
</asp:TreeNode>
</Nodes>
</asp:TreeView>
</form>
</html>
{
StringBuilder bd = new StringBuilder();
string sql="获取顶层菜单名称";
DataTable tb = ado.GetDataSet(sql).Tables[0];
bd.Append("<table border=\"0\" cellpadding=\"0\" cellspacing=\"1\" style=\"width: 100%;font-size: 12px;\" bgcolor=\"#666699\" >");
for (int i = 0; i < tb.Rows.Count; i++)
{//可以加上checkbox;
bd.Append("<tr align=\"left\" bgcolor=\"#E8E8E8\" height=\"23px\">");
bd.Append(" <td width=\"30px\" style=\"text-align: center\">" + tb.Rows[i][0].ToString() + "</td>");
bd.Append("</tr>");
string str = " ";
str = "获取次级菜单名称";
DataTable table = ado.GetDataSet(str).Tables[0];
for (int j = 0; j < table.Rows.Count; j++)
{
bd.Append("<tr align=\"left\" bgcolor=\"#E8E8E8\" height=\"23px\">");
bd.Append(" <td style=\"text-align: center\">" + tb.Rows[j][0].ToString()+ "</td>");
bd.Append("</tr>");
}
}
bd.Append("</table>");
string information = bd.ToString();
return information;
}
总体来说就是用循环将数据库读取的内容填充table,然后用字符串串起来付给一个节点显示
{
protected void Page_Load(object sender, EventArgs e)
{ departList = new List<Department>() {
new Department{ ID = 1, ParentID= 0, Name=" 老总"},
new Department{ ID = 2, ParentID= 1, Name=" 市场副总"},
new Department{ ID = 3, ParentID= 1, Name=" 技术副总"},
new Department{ ID = 4, ParentID= 1, Name=" 行政副总"},
new Department{ ID = 5, ParentID= 2, Name=" 市场部"},
new Department{ ID = 6, ParentID= 4, Name=" 财务部"},
new Department{ ID = 7, ParentID= 4, Name=" 行政部"},
new Department{ ID = 8, ParentID= 3, Name=" C#技术部"},
new Department{ ID = 9, ParentID= 3, Name=" JAVA技术部"},
new Department{ ID = 10, ParentID= 9, Name=" J2EE技术部"},
new Department{ ID = 11, ParentID= 9, Name=" J2ME技术部"}
}; TreeNode root = new TreeNode(); root.Text = this.departList[0].Name;
root.Value = this.departList[0].ID.ToString();
root.Checked = true; this.TreeView1.Nodes.Add(root); this.BindToTree(root);
} /// <summary>
/// 对象列表
/// </summary>
private List<Department> departList;
/// <summary>
/// 绑定到树
/// </summary>
/// <param name="node"></param>
private void BindToTree(TreeNode node)
{
if (node != null)
{
var temp = from dept in departList
where dept.ParentID.ToString() == node.Value
select dept; List<Department> tempList = temp.ToList<Department>(); tempList.ForEach(delegate(Department t)
{
TreeNode tnode = new TreeNode();
tnode.Text = t.Name;
tnode.Value = t.ID.ToString();
tnode.Checked = true; node.ChildNodes.Add(tnode); BindToTree(tnode);
});
}
}
}
经典 treeview可以 要是不嫌麻烦就用JS
menuID content parentID
1 一级 0
2 科技 1
3 沈阳 2
4 二级 0
5 美食 4
6 哈尔滨 5
7 三级 0
8 美食 7
9 大连 8 private void LoadTree()
{
treeView1.Nodes.Clear(); //先清空树
DataTable dt = ds.Tables[0]; //把表结构从数据库查出来放到DataTable中
//循环绑定父节点
foreach (DataRow dr in dt.Rows)
{
//遍历加载父节点
if (Convert.ToInt32(dr["parentID"]) == 0)
{
TreeNode newNode = new TreeNode();
newNode.Text = dr["content"].ToString();
newNode.NavigateUrl = "Switch.aspx?id=" + dr["menuID"].ToString();
newNode.Target = "main";
treeView1.Nodes.Add(newNode); ChildLoad(dr, newNode.ChildNodes, dt);
}
} this.treeView1.ExpandAll();
} //绑定子节点
private void ChildLoad(DataRow dr, TreeNodeCollection newNode, DataTable dt)
{
foreach (DataRow row in dt.Rows)
{
if (Convert.ToInt32(dr["menuID"]) == Convert.ToInt32(row["parentID"]))
{
TreeNode childNode = new TreeNode();
childNode.Text = row["content"].ToString();
childNode.NavigateUrl = "Switch.aspx?id=" + row["menuID"].ToString();
childNode.Target = "main";
newNode.Add(childNode); ChildLoad(row, childNode.ChildNodes, dt); //递归子节点
}
}
}