用户控件,扩展TreeView

来源:互联网 发布:淘宝单号网 编辑:程序博客网 时间:2024/05/23 17:59

 

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using SunSoft.BLL;

/// <summary>
/// 用户自定义TreeView控件
/// author lutiehui
/// date 20070605
/// </summary>

public partial class pages_tool_tree_SunSoftTree : System.Web.UI.UserControl
{  
    
private string _tableName = ""//填充TreeView的数据源[表名]
    /// <summary>
    
/// 填充TreeView的数据源[表名]
    
/// </summary>

    public string TableName
    
{
        
get return _tableName; }
        
set { _tableName = value; }
    }

    
private string _id = "";        //[节点编号]的字段名
    /// <summary>
    
/// [节点编号]的字段名
    
/// </summary>

    public string Id
    
{
        
get return _id; }
        
set { _id = value; }
    }

    
private string _preId = "";     //[父节点编号]的字段名
    /// <summary>
    
/// [父节点编号]的字段名
    
/// </summary>

    public string PreId
    
{
        
get return _preId; }
        
set { _preId = value; }
    }

    
private string _treeName = ""; //[节点名称]的字段名
    /// <summary>
    
/// [节点名称]的字段名
    
/// </summary>

    public string TreeName
    
{
        
get return _treeName; }
        
set { _treeName = value; }
    }

    
private string _rootValue = ""//当节点为根节点时,其_preId字段的值
    /// <summary>
    
/// 当节点为根节点时,其_preId字段的值
    
/// </summary>

    public string RootValue
    
{
        
get return _rootValue; }
        
set { _rootValue = value; }
    }

    
private string _fullPath; //得到[机构全称]的字段名
    /// <summary>
    
/// 得到[机构全称]的字段名
    
/// </summary>

    public string FullPath
    
{
        
get return _fullPath; }
        
set { _fullPath = value; }
    }

    
//实例化一个数据集对象
    DataSet vDs = new DataSet();
    
//实例化一个Tool对象,用已实现相应的业务逻辑
    Tool vT = new Tool();
    
string sql = "";
    
    
protected void Page_Load(object sender, EventArgs e)
    
{
        
//控件加载时,动态从数据源里取得相应数据
        WorkTreeViewBind();
    }


    
/// <summary>
    
/// 绑定数据到TreeView中的方法
    
/// </summary>

    public void WorkTreeViewBind()
    
{
        TreeView1.Nodes.Clear();
        
string selectTableByNameStr = "select * from  " + this._tableName;
        vDs 
= vT.getData(selectTableByNameStr);   //得到所有[_tableName]表中的数据
        DataRow[] drs = vDs.Tables[0].Select(this._preId + "=" + this._rootValue);
        
foreach (DataRow treeRowRoot in drs)
        
{
            TreeNode rootNode 
= new TreeNode();
            rootNode.Text 
= treeRowRoot[this._treeName].ToString();
            
//rootNode.DataPath = treeRowRoot[this._id].ToString();//获取绑定到节点数据的路径
            TreeView1.Nodes.Add(rootNode);
            
long pid = long.Parse(treeRowRoot[this._id].ToString());
            CreateNode(rootNode, pid);
        }

        TreeView1.ExpandAll();
//保证TreeView在每次打开时都处于展开状态     
    }
    

    
/// <summary>
    
/// 递归,得到树节点
    
/// </summary>
    
/// <param name="parentnode">树节点</param>
    
/// <param name="preID">父节点ID</param>

    public void CreateNode(TreeNode parentnode, long preID)
    
{
        DataRow[] drs 
= vDs.Tables[0].Select(this._preId + "=" + preID); ;
        
foreach (DataRow rw in drs)
        
{
            TreeNode childnode 
= new TreeNode();
            childnode.Text 
= rw[this._treeName].ToString();
            
//childnode.Value = rw["id"].ToString(); //用于处理回发事件的数据[值]
            parentnode.ChildNodes.Add(childnode);
            
string treeName = rw[this._treeName].ToString();
            
long pid = long.Parse(rw[this._id].ToString());
            CreateNode(childnode, pid);
        }

    }



    
/// <summary>
    
/// 从数据库中删除节点。[包括节点下的所有子节点]
    
/// </summary>
    
/// <param name="strPath">选中节点的全路径</param>
    
/// <returns>true表示删除成功;否则,返之</returns>

    public bool RemoveNode(string strPath)
    
{
        
string path = strPath.Replace(" ","");//去除所有空值
        sql = "delete  " + this._tableName + " where " + this._fullPath + " like '" + path + "%'";
        
bool b = vT.Remove(sql);
        
return b;
    }


    
/// <summary>
    
/// 获取从根节点到[选中]当前节点的全路径
    
/// </summary>
    
/// <returns>全路径</returns>

    public string GetTreePath()
    
{
        
if (TreeView1.SelectedNode != null)
            
return TreeView1.SelectedNode.ValuePath.Replace(" ","");
        
else
            
return "null";
    }


    
/// <summary>
    
/// 获取选中节点的ID
    
/// </summary>
    
/// <returns>返回当前选中节点的ID</returns>

    public long GetTreeId()
    
{
        
string str = GetTreePath();
        
if (str != "null")//确定只有在选中节点的情况下,再能得到选中的节点ID
        {
            
string[] strArrary = str.Split('/');
            
long id = 0;
            
if (strArrary.Length == 1)
            
{
                sql 
= "select " + this._id + " from " + this._tableName + " where " + this._treeName + " = '" + strArrary[0+ "'";
                
return long.Parse(vT.getData(sql).Tables[0].Rows[0][0].ToString());
            }

            
else
            
{
                
for (int i = 0; i < strArrary.Length; i++)
                
{
                    
if (i == 0)
                    
{
                        sql 
= "select " + this._id + " from " + this._tableName + " where " + this._treeName + " = '" + strArrary[i] + "'";
                        id 
= long.Parse(vT.getData(sql).Tables[0].Rows[0][0].ToString());
                    }

                    
else
                    
{
                        sql 
= "select " + this._id + " from " + this._tableName + " where " + this._treeName + " = '" + strArrary[i] + "' and " + this._preId + "=" + id;
                        id 
= long.Parse(vT.getData(sql).Tables[0].Rows[0][0].ToString());
                    }

                }

                
return id;
            }

        }

        
else
            
return 0;
    }

}

原创粉丝点击