![](data:image/png;base64,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)
Procedure
ALTER PROCEDURE dbo.p
AS
begin
select m.eid,m.name,m.mgr,(select count(*) from emp where emp.mgr=m.eid) ccount from emp m left join emp t on m.mgr=t.eid
end
design code:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!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></title>
<script language="javascript" type="text/javascript">
function OnTreeClick(evt) {
var src = window.event != window.undefined ? window.event.srcElement : evt.target;
var isChkBoxClick = (src.tagName.toLowerCase() == "input" && src.type == "checkbox");
if (isChkBoxClick) {
//alert(src.value);
var parentTable = GetParentByTagName("table", src);
var nxtSibling = parentTable.nextSibling;
//check if nxt sibling is not null & is an element node
if (nxtSibling && nxtSibling.nodeType == 1) {
if (nxtSibling.tagName.toLowerCase() == "div")
//if node has children
{
//check or uncheck children at all levels
CheckUncheckChildren(parentTable.nextSibling, src.checked);
}
}
//check or uncheck parents at all levels
CheckUncheckParents(src, src.checked);
}
}
function CheckUncheckChildren(childContainer, check) {
var childChkBoxes = childContainer.getElementsByTagName("input");
var childChkBoxCount = childChkBoxes.length;
for (var i = 0; i < childChkBoxCount; i++) {
childChkBoxes[i].checked = check;
}
}
function CheckUncheckParents(srcChild, check) {
var parentDiv = GetParentByTagName("div", srcChild);
var parentNodeTable = parentDiv.previousSibling;
if (parentNodeTable) {
var checkUncheckSwitch;
if (check) //checkbox checked
{
var isAllSiblingsChecked = AreAllSiblingsChecked(srcChild);
if (isAllSiblingsChecked)
checkUncheckSwitch = true;
else
return; //do not need to check parent if any(one or more) child not checked
}
else //checkbox unchecked
{
checkUncheckSwitch = false;
}
var inpElemsInParentTable = parentNodeTable.getElementsByTagName("input");
if (inpElemsInParentTable.length > 0) {
var parentNodeChkBox = inpElemsInParentTable[0];
parentNodeChkBox.checked = checkUncheckSwitch; //do the same recursively
CheckUncheckParents(parentNodeChkBox, checkUncheckSwitch);
}
}
}
function AreAllSiblingsChecked(chkBox) {
var parentDiv = GetParentByTagName("div", chkBox);
var childCount = parentDiv.childNodes.length;
for (var i = 0; i < childCount; i++) {
if (parentDiv.childNodes[i].nodeType == 1) {
//check if the child node is an element node
if (parentDiv.childNodes[i].tagName.toLowerCase() == "table") {
var prevChkBox = parentDiv.childNodes[i].getElementsByTagName("input")[0];
//if any of sibling nodes are not checked,
return false
if (!prevChkBox.checked) {
return false;
}
}
}
}
return true;
}
//utility function to get the container of an element by tagname
function GetParentByTagName(parentTagName, childElementObj) {
var parent = childElementObj.parentNode;
while (parent.tagName.toLowerCase() != parentTagName.toLowerCase()) {
parent = parent.parentNode;
}
return parent;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="sm" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="up" runat="server">
<ContentTemplate>
<div>
<table align="center">
<tr><td>EID</td><td><asp:TextBox ID="tb" runat="server"></asp:TextBox></td></tr>
<tr><td>NAME</td><td><asp:TextBox ID="tb1" runat="server"></asp:TextBox></td></tr>
<tr><td>MGR</td><td><asp:DropDownList ID="ddl" runat="server"></asp:DropDownList></td></tr>
<tr><td> </td><td><asp:Button ID="btn" runat="server" Text="Save" Width="80"
onclick="btn_Click"/></td></tr>
<tr><td> </td><td><asp:TreeView ID="tv" runat="server" ShowCheckBoxes="All"
ontreenodepopulate="tv_TreeNodePopulate"></asp:TreeView></td></tr>
</table>
</div>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
c# code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
#region
DataClassesDataContext o = new DataClassesDataContext();
#endregion
protected void Page_Load(object sender, EventArgs e)
{
tv.Attributes.Add("onclick", "OnTreeClick(event)");
if (!IsPostBack)
{
fill();
filltv();
tv.CollapseAll();
}
}
void fill()
{
var m = (from x in o.EMPs select new {x.EID,x.NAME}).ToList();
ddl.DataSource = m;
ddl.DataTextField = "NAME";
ddl.DataValueField = "EID";
ddl.DataBind();
}
void filltv()
{
tv.Nodes.Clear();
var m=(from x in o.p() where x.mgr==0 select new {x.eid,x.name,x.ccount}).ToList();
for (int i = 0; i < m.Count; i++)
{
TreeNode tn = new TreeNode();
tn.Text = m[i].name;
tn.Value = m[i].eid.ToString();
tv.Nodes.Add(tn);
tn.PopulateOnDemand = false;
if (m[i].ccount > 0)
tn.PopulateOnDemand = true;
}
}
protected void btn_Click(object sender, EventArgs e)
{
EMP p = new EMP();
p.EID = Convert.ToInt32(tb.Text);
p.NAME = tb1.Text;
p.MGR = Convert.ToInt32(ddl.SelectedValue);
o.EMPs.InsertOnSubmit(p);
o.SubmitChanges();
ScriptManager.RegisterClientScriptBlock(this, GetType(), "x", "alert('One record saved.')", true);
fill();
filltv();
}
protected void tv_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{
var m = (from x in o.p() where x.mgr == Convert.ToInt32(e.Node.Value) select new {x.eid,x.name,x.ccount }).ToList();
for(int i=0;i<m.Count;i++)
{
TreeNode tn = new TreeNode();
tn.Value = m[i].eid.ToString();
tn.Text = m[i].name;
e.Node.ChildNodes.Add(tn);
tn.PopulateOnDemand = false;
if (m[i].ccount > 0)
tn.PopulateOnDemand = true;
}
}
}
![](data:image/png;base64,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)