首页 新闻 会员 周边 捐助

关于TREEVIEW 的checked 的问题。

0
悬赏园豆:10 [已关闭问题] 关闭于 2012-04-17 15:46

为了实现点击Treeview Root & parentnode 点击后自动选择leafNODE 节点,我在ASPX的页面增加代码如下:

   <script language="javascript" type="text/javascript">
        //RoleManagement CheckBox select ;  ====================================================================================
function client_OnTreeNodeChecked(obj)
{//var obj = window.event.srcElement;
    var treeNodeFound = false;
    var checkedState;
    if (obj.tagName == "INPUT" && obj.type == "checkbox") 
    {
    var treeNode = obj;
    checkedState = treeNode.checked;
    do
    {
        obj = obj.parentElement;
    } while (obj.tagName != "TABLE")

    var parentTreeLevel = obj.rows[0].cells.length;
    var parentTreeNode = obj.rows[0].cells[0];
    var tables = obj.parentElement.getElementsByTagName("TABLE");
    var numTables = tables.length
    if (numTables >= 1)
    {
    for (i=0; i < numTables; i++)
    {
    if (tables[i] == obj)
    {
    treeNodeFound = true;
    i++;
    if (i == numTables)
    {
    return;
    }
    }
    if (treeNodeFound == true)
    {
    var childTreeLevel = tables[i].rows[0].cells.length;
    if (childTreeLevel > parentTreeLevel)
    {
    var cell = tables[i].rows[0].cells[childTreeLevel - 1];
    var inputs = cell.getElementsByTagName("INPUT");
    inputs[0].checked = checkedState;
    }
    else
    {
    return;
    }
    }
    }
    }
    }
}
    
function  CheckEvent()
{ 
    var  objNode  =  event.srcElement; 

    client_OnTreeNodeChecked(objNode);

    if(objNode.tagName == "INPUT"  &&  objNode.type== "checkbox") 
    {
    var objParentDiv = objNode.id.replace("checkbox","Nodes");
    if(objNode.checked==true)
    { 
    //setChildCheckState(objParentDiv,true);    
    //client_OnTreeNodeChecked();                 
    setParentCheckeState(objNode,true); 
    }
    }
    else 
    {
    //setChildCheckState(objParentDiv,false);      
    //client_OnTreeNodeChecked();              
    //         if(!HasOtherChecked(objNode))
    //         {    
    //             setParentCheckeState(objNode,false); 
    //         }
    }
}

//判断是否有并行的其他节点被选中
 function HasOtherChecked(objNode)
 {
    var  objParentDiv  =  WebForm_GetParentByTagName(objNode, "div"); 
    var chks = objParentDiv.getElementsByTagName("INPUT");
    for(var i=0;i<chks.length;i++)
    {
         if(chks[i].checked && chks[i].id != objNode.id)
         {
             return true;
         }
    }
    return false;
 }

 //设置父节点
 function  setParentCheckeState(objNode,chkstate) 
 {  
    try
    {
        var  objParentDiv  =  WebForm_GetParentByTagName(objNode, "div");         
        if(objParentDiv == null  ||  objParentDiv  ==  "undefined ")
        { 
            return; 
        } 
        else
        {
            var objParentChkId = objParentDiv.id.replace("Nodes","CheckBox"); 
            var objParentCheckBox = document.getElementById(objParentChkId);            
          
            if(objParentCheckBox)
            { 
                objParentCheckBox.checked = chkstate;
                setParentCheckeState(objParentDiv,chkstate);
            }
        }
    }
    catch(e){}
} 

//设置子节点
function  setChildCheckState(nodeid,chkstate) 
{  
    var node = document.getElementById(nodeid);
    if(node)
    {
        var chks = node.getElementsByTagName("INPUT");
        for(var i=0;i<chks.length;i++)
        {
            chks[i].checked = chkstate;
        }
    }
}

然后再.CS 内给TREEview绑定了一个属性。

 this.TreeView1.Attributes.Add ( "onclick", "CheckEvent();" );

然后再定义一个方法,来遍历选择的节点,对应的保存到不同的表内,代码如下,但是不知道为何

if (TN.Checked)都是false ,奇怪中。

 private string SaveTreeString(TreeNodeCollection TNC) // 保存TREE 选择情况。
    {
        string RString = "";
        foreach ( TreeNode TN in TNC )
        {
            if (TN.Checked )
            {

                if ( TN.ToolTip == "公司" )
                {
                    RString = "insert into TR_A(PlanID,CorpID) values(N'" + L_newid.Text + "',N'" + TN.Value + "'); ";
                }

                if ( TN.ToolTip == "部门" )
                {
                    RString = "insert into TR_B(PlanID,DeptInstantID) values(N'" + L_newid.Text + "',N'" + TN.Value + "'); ";
                }

                if ( TN.ToolTip == "岗位" )
                {
                    RString = "insert into TR_C(PlanID,PosInstID) values(N'" + L_newid.Text + "',N'" + TN.Value + "'); ";
                }

                if ( TN.ToolTip == "员工" )
                {
                    RString = "insert into TR_D(PlanID,UID) values(N'" + L_newid.Text + "',N'" + TN.Value + "'); ";

                }
                           RString += SaveTreeString ( TN.ChildNodes );
            }
            else
                RString += SaveTreeString ( TN.ChildNodes );
        }
        return RString;
    }
问题补充:

每个节点的ToolTip 都是可以取到的。 为什么那?我很着急啊 ,那位能帮忙看看啊。

figofeng的主页 figofeng | 初学一级 | 园豆:5
提问于:2012-04-16 20:29
< >
分享
所有回答(1)
0

自己解决了,犯了一个低级错误,没有吧TREEVIEW的绑定放在    if (!IsPostBack ){} 之内。

figofeng | 园豆:5 (初学一级) | 2012-04-17 15:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册