写了个遍历树的脚本,可服务器端获取不到节点状态,这是啥原因?遍历树的脚本实现的功能为:选中父节点,所有子节点选中
选中子节点,节点的父节点及父节点的父节点....选中.现在前台已经没问题了.
TreeNodeCollection tnc ;
if(node == null)
{
tnc = TreeViewAuth.Nodes;
}
else
{
tnc = node.Nodes;
}

foreach(TreeNode tn in tnc)
{
//节点对应的行
bool orgMark = bool.Parse(tn.NodeData.Split(',')[0]);
int  funID   = int.Parse(tn.NodeData.Split(',')[1]);

//授权
if(!orgMark && tn.Checked)
{
DataRow row = dsAuth.Tables[0].NewRow();
row["AUTH_USER_CODE"] = userCode;
row["AUTH_FUN_ID"] = funID;
row["AUTH_ACCEPT"] = true;
dsAuth.Tables[0].Rows.Add(row);
}
我现在把所有节点都选中了tn.Checked还等于false;
我把在pageload中加载脚本的代码去掉就可以获取到了
this.TreeViewAuth.Attributes.Add("oncheck","tree_oncheck(this)");有谁碰过这问题吗?

解决方案 »

  1.   

    this.TreeViewAuth.Attributes.Add("oncheck","tree_oncheck(this)");
    这句执行什么操作?
      

  2.   

    这是对树加载一javascript tree_oncheck(tree)函数
      

  3.   

    没人知道吗?
    难道用js代码让checkbox选中和直接用鼠标点中不同?
      

  4.   

    public TreeNodeCollection GetCheckedTreeNodes()
    {
                checkedTreeNodes=new TreeNodeCollection();
    if (this.Nodes[0].Checked)
    {
    TreeNode node=this.Nodes[0].Clone() as TreeNode;
    checkedTreeNodes.Add(node);
    }
    GetCheckedTreeNode(this.Nodes[0]); //递归获取选中的节点
    return checkedTreeNodes;
    }上面是我写的函数,this就是TreeView对象
      

  5.   

    /// <summary>
    /// 获取所有选中的节点的NodeID组合字符串
    /// </summary>
    /// <param name="sep">分隔符</param>
    /// <param name="DataType">获取数据的种类</param>
    public string GetCheckedTreeNodesIDs(string sep,string dataType)
    {
                System.Text.StringBuilder sb=new System.Text.StringBuilder(600);
    TreeNodeCollection tc=GetCheckedTreeNodes(); //获取所有选中的节点的集合
    foreach (TreeNode node in tc)
    {
                    sb.Append(sep);
    switch (dataType)
    {
    case "ID":
    sb.Append(node.ID);
    break;
    case "NodeData":
    sb.Append(node.NodeData);
    break;
    case "Text":
    sb.Append(node.Text);
    break;
    }
    }
    if (sb.Length>0)
    sb=sb.Remove(0,1);
    return sb.ToString();
    }
      

  6.   

    /// <summary>
    /// 获取单个节点中的所有选中的子节点
    /// </summary>
    /// <param name="parentNode"></param>
    protected void GetCheckedTreeNode(TreeNode parentNode)
    {
    foreach (TreeNode node in parentNode.Nodes)
    {
    if (node.Checked)
    {
    TreeNode cloneNode=node.Clone() as TreeNode;
    checkedTreeNodes.Add(cloneNode);
    }
    GetCheckedTreeNode(node);
    }
    }
    /// <summary>
    /// 获取所有CheckBox中选中的节点
    /// </summary>
    /// <returns></returns>
    public TreeNodeCollection GetCheckedTreeNodes()
    {
                checkedTreeNodes=new TreeNodeCollection();
    if (this.Nodes[0].Checked)
    {
    TreeNode node=this.Nodes[0].Clone() as TreeNode;
    checkedTreeNodes.Add(node);
    }
    GetCheckedTreeNode(this.Nodes[0]); //递归获取选中的节点
    return checkedTreeNodes;
    }
    不要意思,上面的回复贴的不全,因为我继承TreeView类写了自己的类,把一些操作封装起来用,所以时间长了,自己写的东西都不太清楚了。
    上面2个函数用来获取所有选中的节点,this就是TreeView对象本身。
    那个GetCheckedTreeNodesIDs(string sep,string dataType)函数名字不大对,原本只是为了取ID的,后来又需要取别的内容,加上时间紧,所以就名不副实了~