(原创)一个实现了数据绑定的树

///如未特别说明,本人所发表的技术文章都为原创, 任何人引用都请注明出处,并包含本声明
///作者: CSDN网名alias88,邮件: [email protected] ,QQ:63343 欢迎加我 :)

此树可以绑定到数据源,意味着可随着绑定管理器同步操作,

例如position改变自动选择结点,反过来亦然, 选择不同的结点将改变绑定管理器的position,而且数据操作也能同步于绑定管理器,您在DataGrid中的改变将即时反映在树中......

还有一个特点,对数据结构没有要求,它总是能正确地将您的数据以树结构展现出来,下图中,如果使用搜索 功能筛选出任一部分数据出来,左边的树形结构也将是正确的

使用方法和例图:

TreeView1.AllowDrop =true;
this.TreeView1.SetDataBinding (this.UserDataSet ,"会计科目" ,"上级编号","科目编号","科目名称",null);

_ _

_ _

_ _

using System;

using System.Collections;

using System.ComponentModel;

using System.Drawing;

using System.Data;

using System.Windows.Forms;

 

 

using upLibrary.upCommon ;

using upLibrary.upReflect;

using upLibrary.upControls ;

using System.Diagnostics;

using upSystem.upData ;

 

 

namespace upSystem.upControls

{

  ///
1<summary>
2    
3      /// 一个实现了数据绑定的树
4    
5      /// </summary>

public class upTreeView : upTreeViewBase

  {

    private object dataSource;

    private string dataMember;

    private string parentIDColumn,idColumn,textColumn;

    private object[] topID=null;

    

    private PropertyDescriptorCollection propertys=null;

    private PropertyDescriptor parentIDProperty,idProperty,textProperty;

      

    private CurrencyManager bindingManager=null;

    private IBindingList  bindingList=null;

    private bool dataSourceEvent,treeViewEvent;

    private DataView dataView=null;

    private upSystem.upCommon.upStack stack=new upSystem.upCommon.upStack ();

    

    private System.ComponentModel.Container components = null;

    public event System.EventHandler DataSourceChanged;

    private System.Windows.Forms.ContextMenu cntMenu;

 

 

    public upTreeView()

    {

      InitializeComponent();

      this.cntMenu = new System.Windows.Forms.ContextMenu();

      MenuItem mnu;

      mnu=cntMenu.MenuItems.Add ("&amp;O展开");

      mnu.Click +=new EventHandler(mnu_Click);

      mnu=cntMenu.MenuItems.Add ("&amp;C折叠");

      mnu.Click +=new EventHandler(mnu_Click);

      mnu=cntMenu.MenuItems.Add ("-");

      mnu=cntMenu.MenuItems.Add ("&amp;E全部展开");

      mnu.Click +=new EventHandler(mnu_Click);

      mnu=cntMenu.MenuItems.Add ("&amp;A全部折叠");

      mnu.Click +=new EventHandler(mnu_Click);

      this.ContextMenu = this.cntMenu;

    }

 

 

    ///
1<summary> 
2    
3        /// 清理所有正在使用的资源。
4    
5        /// </summary>

protected override void Dispose( bool disposing )

    {

      if( disposing )

      {

        if(components != null)

        {

          components.Dispose();

        }

      }

      base.Dispose( disposing );

    }

 

 

    #region 组件设计器生成的代码

    ///
1<summary> 
2    
3        /// 设计器支持所需的方法 - 不要使用代码编辑器 
4    
5        /// 修改此方法的内容。
6    
7        /// </summary>

private void InitializeComponent()

    {

       

      

 

 

    }

    #endregion

 

 

    #region 属性

    

    ///
1<summary>
2    
3        /// 父节点
4    
5        /// </summary>

public string ParentIDColumn

    {

      get{return parentIDColumn ; }

      set

      {

        if (parentIDColumn!=value  )

        {

          parentIDColumn=value;  

        }

      }

    }

 

 

 

 

    ///
1<summary>
2    
3        /// 子结点
4    
5        /// </summary>

public string IDColumn

    {

      get{return idColumn ;}

      set

      {

        if (idColumn!=value  )

        {

          idColumn=value;  

        }

      }

    }

 

 

    ///
1<summary>
2    
3        /// 节点文本
4    
5        /// </summary>

public string TextColumn

    {

      get{return textColumn ;}

      set

      {

        if (textColumn!=value  )

        {

          textColumn=value;  

        }

      }

    }

 

 

    ///
1<summary>
2    
3        /// 树的根结点
4    
5    &lt;span l</summary>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus