treeview绑定到关系数据源,生成树,并实现checkbox的级联选择
2010-05-18 21:29
501 查看
treeview使用参考vs的联机帮助,这里重点讲一下treeview绑定到关系数据源,同时实现checkbox的级联选择(使用TreeView.js),提交checkbox为true的项。或者导入某些项到treeview中进行编辑,使相应的checkbox为true。数据表必须有自身id、父亲id两个字段。
前台:
后台:
treeview.js
前台:
<mce:script language="javascript" src="TreeView.js" mce_src="TreeView.js" type="text/javascript"></mce:script> <mce:script language ="javascript" type="text/javascript"><!-- function OnTreeNodeChecked() { var element = element = window.event.srcElement; if (!IsCheckBox(element)) return; var isChecked = element.checked; var tree = TV2_GetTreeById("TreeView1"); var node = TV2_GetNode(tree,element); TV2_SetChildNodesCheckStatus(node,isChecked); var parent = TV2_GetParentNode(tree,node); TV2_NodeOnChildNodeCheckedChanged(tree,parent,isChecked); } // --></mce:script> <asp:TreeView ID="TreeView1" runat="server" ShowCheckBoxes="All" OnClick="OnTreeNodeChecked(this)" > </asp:TreeView> <asp:Button ID="Button1" Width="40px" Text="提交" runat="server" onclick="Button1_Click" Height="26px" /> <asp:Button ID="Button2" Width="40px" runat="server" Text="编辑" onclick="Button2_Click" /> <asp:ListBox id=” ListBox1” runat=”server”></asp:ListBox>
后台:
public partial class test1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { GetDepartment(); } } //绑定数据到treeview private void GetDepartment() { TreeView1.Nodes.Clear(); AddTree(0, (TreeNode)null); } public void AddTree(int ParentID, TreeNode pNode) { string sqlString = "select D_id,D_parentId,D_name from department"; DataTable dt = new DataTable(); //这个是我获取数据源的代码 dt = sqlhelper.GetDataTable(sqlString, "mis"); DataView dvTree = new DataView(dt); //过滤ParentID,得到当前的所有子节点 dvTree.RowFilter = "D_ parentId =" + ParentID; foreach (DataRowView Row in dvTree) { TreeNode Node = new TreeNode(); if (pNode == null) { //添加根节点 Node.Text = Row["D_name"].ToString().Trim(); Node.Value = Row["D_id"].ToString().Trim(); TreeView1.Nodes.Add(Node); //Node.Expanded = true; AddTree(Int32.Parse(Row["D_id"].ToString()), Node); //再次递归 } else { //添加当前节点的子节点 Node.Text = Row["D_name"].ToString(); Node.Value = Row["D_id"].ToString().Trim(); pNode.ChildNodes.Add(Node); //Node.Expanded = true; AddTree(Int32.Parse(Row["D_id"].ToString()), Node); //再次递归 } } } //提交 protected void Button1_Click(object sender, EventArgs e) { ListBox1.Items.Clear(); foreach(TreeNode tn in TreeView1.CheckedNodes ) { ListItem li = new ListItem(); li.Text = tn.Text; li.Value = tn.Value; ListBox1.Items.Add(li); } } //编辑 protected void Button2_Click(object sender, EventArgs e) { GetDepartment(); foreach(ListItem li in ListBox1.Items) { IntoTV(TreeView1.Nodes,li.Text); } } //倒入到treeview private void IntoTV(TreeNodeCollection parNode, string parListItem) { foreach (TreeNode node in parNode) { if (node.Text == parListItem) { node.Checked = true; Message.Text += node.Text; } else { if (node.ChildNodes.Count != 0) { IntoTV(node.ChildNodes, parListItem); } } } } }
treeview.js
function TV2_SetChildNodesCheckStatus(node,isChecked) { var childNodes = TV2i_GetChildNodesDiv(node); if(childNodes == null) return; var inputs = WebForm_GetElementsByTagName(childNodes,"INPUT"); if(inputs == null || inputs.length == 0) return; for(var i = 0; i < inputs.length; i++) { if(IsCheckBox(inputs[i])) inputs[i].checked = isChecked; } } //change parent node checkbox status after child node changed function TV2_NodeOnChildNodeCheckedChanged(tree,node,isChecked) { if(node == null) return; var childNodes = TV2_GetChildNodes(tree,node); if(childNodes == null || childNodes.length == 0) return; var isAllSame = true; for(var i = 0; i < childNodes.length; i++) { var item = childNodes[i]; var value = TV2_NodeGetChecked(item); if(isChecked != value) { isAllSame = false; break; } } var parent = TV2_GetParentNode(tree,node); if(isAllSame) { TV2_NodeSetChecked(node,isChecked); TV2_NodeOnChildNodeCheckedChanged(tree,parent,isChecked); } else { TV2_NodeSetChecked(node,false); TV2_NodeOnChildNodeCheckedChanged(tree,parent,false); } } //get node relative element(etc. checkbox) function TV2_GetNode(tree,element) { var id = element.id.replace(tree.id,""); id = id.toLowerCase().replace(element.type,""); id = tree.id + id; var node = document.getElementById(id); if(node == null) //leaf node, no "A" node return element; return node; } //get parent node function TV2_GetParentNode(tree,node) { var div = WebForm_GetParentByTagName(node,"DIV"); //The structure of node: <table>information of node</table><div>child nodes</div> var table = div.previousSibling; if(table == null) return null; return TV2i_GetNodeInElement(tree,table); } //get child nodes array function TV2_GetChildNodes(tree,node) { if(TV2_NodeIsLeaf(node)) return null; var children = new Array(); var div = TV2i_GetChildNodesDiv(node); var index = 0; for(var i = 0; i < div.childNodes.length; i++) { var element = div.childNodes[i]; if(element.tagName != "TABLE") continue; var child = TV2i_GetNodeInElement(tree,element); if(child != null) children[index++] = child; } return children; } function TV2_NodeIsLeaf(node) { return !(node.tagName == "A"); //Todo } function TV2_NodeGetChecked(node) { var checkbox = TV2i_NodeGetCheckBox(node); return checkbox.checked; } function TV2_NodeSetChecked(node,isChecked) { var checkbox = TV2i_NodeGetCheckBox(node); if(checkbox != null) checkbox.checked = isChecked; } function IsCheckBox(element) { if(element == null) return false; return (element.tagName == "INPUT" && element.type.toLowerCase() == "checkbox"); } //get tree function TV2_GetTreeById(id) { return document.getElementById(id); } ////////////////////////////////////////////////////////////////////////////////////////////// //private mothods, with TV2i_ prefix ////////////////////////////////////////////////////////////////////////////////////////////// //get div contains child nodes function TV2i_GetChildNodesDiv(node) { if(TV2_NodeIsLeaf(node)) return null; var childNodsDivId = node.id + "Nodes"; return document.getElementById( childNodsDivId ); } //find node in element function TV2i_GetNodeInElement(tree,element) { var node = TV2i_GetNodeInElementA(tree,element); if(node == null) { node = TV2i_GetNodeInElementInput(tree,element); } return node; } //find "A" node function TV2i_GetNodeInElementA(tree,element) { var as = WebForm_GetElementsByTagName(element,"A"); if(as== null || as.length == 0) return null; var regexp = new RegExp("^" + tree.id + "n//d+$"); for(var i = 0; i < as.length; i++) { if(as[i].id.match(regexp)) { return as[i]; } } return null; } //find "INPUT" node function TV2i_GetNodeInElementInput(tree,element) { var as = WebForm_GetElementsByTagName(element,"INPUT"); if(as== null || as.length == 0) return null; var regexp = new RegExp("^" + tree.id + "n//d+"); for(var i = 0; i < as.length; i++) { if(as[i].id.match(regexp)) { return as[i]; } } return null; } //get checkbox of node function TV2i_NodeGetCheckBox(node) { if(IsCheckBox(node)) return node; var id = node.id + "CheckBox"; return document.getElementById(id); }
相关文章推荐
- 用JS实现VS2005 TreeView的checkBox的父子节点级联----取自YYControls
- javacript实现TreeView中checkBox的选择
- 解决treeview的checkbox级联选择
- ASP.NET实现TreeView的XML数据源绑定
- ASP.NET实现TreeView的XML数据源绑定实例代码
- treeview控件中的checkbox级联选择
- jQuery实现的checkbox级联选择下拉菜单效果示例
- 扩展treeview实现选择checkbox自动回发
- ASP.NET 2.0 TreeView中用JavaScript实现选择子接点CheckBox是自动选择上父节点(或者所有父节点)
- C#中TreeView的CheckBox的两种级联选择
- Treevi中的checkbox联动选择,以及Treeview的生成(即选择或取消复选框,其自选框同时选择或取消)
- TreeView的数据源绑定—采用XML作为数据源,实现对treeview进行增删改查,之后回写XML文档
- TreeView中使用checkBox时子节点和父节点的级联选择
- js实现checkbox级联选择
- TreeView实现级联选择
- ASP.NET实现TreeView的XML数据源绑定实例代码
- Treevi中的checkbox联动选择,以及Treeview的生成(即选择或取消复选框,其自选框同时选择或取消)
- TreeView的数据源绑定—采用sqlite作为数据源,实现对treeview控件进行增删改查
- TreeView 控件 Checkbox 级联选择
- 扩展 TreeView 实现选择 CheckBox 自动回发