adandelion

诗词在线 http:/www.chinapoesy.com


诗词在线 |唐诗|宋词|元曲|诗经|离骚|乐府|现代诗歌

博客园 首页 联系 订阅 管理
  94 Posts :: 112 Stories :: 279 Comments :: 7 Trackbacks

2.包括TreeView的asp.net程序的打包问题:
http://ttyp.cnblogs.com/archive/2005/06/01/165621.html
http://community.csdn.net/Expert/topic/4300/4300558.xml?temp=.7716028

在web.config加入以下节

    <configSections>
        
<section name="MicrosoftWebControls" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />    
    
</configSections>
 
    
<MicrosoftWebControls>
        
<add key="CommonFiles" value="/web/treepath/"></add>        
    
</MicrosoftWebControls>


注意:configSections一定要放在第一个子节最前面.

剪切默认网站的webctrl_client目录到虚拟目录web/treepath/下,运行程序,树型界面出现了,只是前面的加减号出现问题,再右键查看WEB代码,发现SystemImagesPath属性还是指到webctrl_client目录下,看了SystemImagesPath的代码,把treeview控件的SystemImagesPath设置为空,再次运行程序,OK!全部通过,treeview的图片目录再也不需要依赖默认网站的图片目录了,打包也变的方便了

3.客户端操作TreeView带CheckBox的好例子(1)--选择 /取消父节点后其所有子节点自动选择 /取消。不过里面有点小问题要注意:

(1)就是如何初始化已经选择的节点:注意要从客户端初始化的(把选择的节点放在客户端一个隐藏域里通过JS初始化).如果你在服务器端初始化了将无法在客户端修改它的状态.

(2)如何获得客户端设置的节点:在客户端改变了选择状态(node.setAtrribute("check","ture"))后,通过服务器端是无法获得选择的值的,也只能在客户端获得它(通过一个input type="hiiden" runat="server"来保存选择的值).
上面两个问题都是参考了下面的代码完成的.


两个客户端操作TreeView节点CheckBox的小例子 (转江雨.net)(自动选择子节点)
下面是修改后详细代码:

<script language="javascript">

            
//初始化选中节点
            function initchecknode()
            
{
                
//获得需要初始化选择状态的节点的字符串.
                var selectedNodes = document.all.checkedNodes.value;
                
var arrayNodes = new Array();
                arrayNodes 
= selectedNodes.split(",");
                
var AllRootNode=new Array();
                AllRootNode
=document.getElementById("TreeView1").getChildren();
                
//初始化选择的节点
                findAndCheckedNodes(AllRootNode,arrayNodes);
            }


            
//根据已选择的节点的字符串初始化选择的节点
            function findAndCheckedNodes(NodeArray,nodeDatas)
            
{
                
//alert(NodeArray.length);
                 if(parseInt(NodeArray.length)==0)
                 
{
                    
return;
                }

                
else
                
{
                    
for(var i=0;i<parseInt(NodeArray.length);i++)
                    
{
                        
var cNode,nodeData;
                        cNode
=NodeArray[i];
                        
////如果该节点在nodeDatas里则初始化checked = true;
                        nodeData = cNode.getAttribute("NodeData");
                        
for(var j=0;j<nodeDatas.length;j++)
                        
{
                            
if(nodeDatas[j] == nodeData)
                            
{
                                cNode.setAttribute(
"checked","true");
                                
break;
                            }

                        }

                        
//如果有子节点,则继续递归
                        if(parseInt(cNode.getChildren().length)!=0)
                        findAndCheckedNodes(cNode.getChildren(),nodeDatas);    
                    }

                }

            }

            
            
//节点的oncheck事件
            function tree_oncheck(tree)
            
{
                
var node=tree.getTreeNode(tree.clickedNodeIndex);
                
var Pchecked=tree.getTreeNode(tree.clickedNodeIndex).getAttribute("checked");
                setcheck(node,Pchecked);
                document.all.checkedNodes.value
="";
                document.all.unchecked.value
="";
                FindCheckedFromNode(TreeView1);
            }

            
//设置子节点选中
            function setcheck(node,Pc)
            
{
                
var i;
                
var ChildNode=new Array();
                ChildNode
=node.getChildren();
                 
                
if(parseInt(ChildNode.length)==0)
                    
return;
                
else
                
{
                    
for(i=0;i<ChildNode.length;i++)
                    
{
                        
var cNode;
                        cNode
=ChildNode[i];
                        
if(parseInt(cNode.getChildren().length)!=0)
                            setcheck(cNode,Pc);
                        cNode.setAttribute(
"checked",Pc);
                    }

                }

            }

            
//获取所有节点状态
            function FindCheckedFromNode(node) 
            
{
                
var i = 0;
                
var nodes = new Array();
                nodes 
= node.getChildren();
                 
                
for (i = 0; i < nodes.length; i++
                
{
                    
var cNode;
                    cNode
=nodes[i];
                    
if (cNode.getAttribute("checked"))
                        AddChecked(cNode);
                    
else
                        AddUnChecked(cNode);
                      
                    
if (parseInt(cNode.getChildren().length) != 0 ) 
                    
{
                        FindCheckedFromNode(cNode);
                    }

                }

            }

            
//添加选中节点
            function AddChecked(node) 
            
{
                document.all.checkedNodes.value 
+= node.getAttribute("NodeData");
                document.all.checkedNodes.value 
+= ',';
            }

            
//添加未选中节点
            function AddUnChecked(node)
            
{
                document.all.unchecked.value 
+= node.getAttribute("NodeData");
                document.all.unchecked.value 
+= ',';
            }

            
        
</script>

    <body MS_POSITIONING="FlowLayout" onload="initchecknode()">
        
<form id="Form1" method="post" runat="server">
            
<FONT face="宋体">
                
<TABLE class="main" id="Table1">
                    
<TR>
                        
<TD></TD>
                        
<TD align="center" height="50">权限管理</TD>
                        
<TD></TD>
                    
</TR>
                    
<TR>
                        
<TD></TD>
                        
<TD>用户名:
                            
<asp:label id="lblUserName" runat="server">Label</asp:label></TD>
                        
<TD></TD>
                    
</TR>
                    
<TR>
                        
<TD></TD>
                        
<TD><iewc:treeview id="TreeView1" runat="server" ExpandLevel="1" SelectExpands="True" SystemImagesPath="/webctrl_client/1_0/treeimages/"
                                ImageUrl
="images/fclose.gif" SelectedImageUrl="images/bookmark.gif" ExpandedImageUrl="images/fopen.gif"
                                Target
="main" AutoSelect="True" wilth="100%"></iewc:treeview></TD>
                        
<TD></TD>
                    
</TR>
                    
<TR>
                        
<TD></TD>
                        
<TD align="center" height="50">
                            
<asp:button id="BtnSure" runat="server" Text="保存"></asp:button>&nbsp;
                        
</TD>
                        
<TD></TD>
                    
</TR>
                
</TABLE>
            
<INPUT id="checkedNodes" type="hidden" size="32" runat="server" NAME="checkedNodes"> <!--已经选择的节点每个节点间用","分隔.-->
            
<INPUT id="unchecked" type="hidden" size="32">
        
</form>
    
</body>

主要后台代码:




        
//数据访问实例
protected ClassConn connE = new ClassConn();

private void Page_Load(object sender, System.EventArgs e)
{
    
// 在此处放置用户代码以初始化页面
    if ( !IsPostBack)
    
{
        TreeView1.Attributes.Add(
"oncheck","tree_oncheck(this)");
        ViewState[
"UserId"= Request.QueryString["id"]+string.Empty;

        
//初始化用户名
        lblUserName.Text=connE.GetFieldValue("string","select name from EPM_EmployeeList where id = "+ViewState["UserId"].ToString());
        ViewState[
"dsTree"= connE.getDs("select * from EPM_DepartmentList where corpid="+Session["EnterpriseId"].ToString()+" and (type ="+Session["EnterpriseType"].ToString()+" or type=2)  and state=1 order by ShowIndex");
        connE.Close();
        
//初始化权限信息    
        InitData();


        
    }

}



/// <summary>
/// 初始化权限树.
/// </summary>
/// <param name="nFatherid">父节点的ID</param>
/// <param name="node"></param>

protected void initTree( int nFatherid,TreeNode fatherNode)
{
    DataSet ds 
= (DataSet)ViewState["dsTree"];
    DataView dv 
= new DataView(ds.Tables[0]);
    dv.RowFilter 
= "[parentDeptid] = "+nFatherid;
    
    
foreach ( DataRowView Row in dv )
    
{
        TreeNode node 
= new TreeNode();
        
if (fatherNode == null)//根节点
        {
            node.Text
=Row["name"].ToString();
            node.NodeData 
= Row["id"].ToString();
            node.CheckBox 
= true;
            
this.TreeView1.Nodes.Add(node);
            
//node.Expanded=false;//是否展开,若设置为true 则ExpandLevel="1" 无效
            initTree(Int32.Parse(Row["id"].ToString()),node);//递归
        }

        
else
        
{
            node.Text 
= Row["name"].ToString();
            node.NodeData 
= Row["id"].ToString();
            
//node.NavigateUrl = Row["url"].ToString();
            node.CheckBox = true;
            fatherNode.Nodes.Add(node);
            initTree(Int32.Parse(Row[
"id"].ToString()),node);//递归