///如未特别说明,本人所发表的技术文章都为原创, 任何人引用都请注明出处,并包含本声明
///作者: 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 ("&O展开");
mnu.Click +=new EventHandler(mnu_Click);
mnu=cntMenu.MenuItems.Add ("&C折叠");
mnu.Click +=new EventHandler(mnu_Click);
mnu=cntMenu.MenuItems.Add ("-");
mnu=cntMenu.MenuItems.Add ("&E全部展开");
mnu.Click +=new EventHandler(mnu_Click);
mnu=cntMenu.MenuItems.Add ("&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 <span l</summary>