广

ASP.NET

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    TreeView创建IHierarchicalDataSource类型的数据源实现

    2018-05-16 07:54:54 次阅读 稿源:互联网
    广告
    IHierarchicalDataSource实现:
    public class InsHierarchyData : IHierarchyData, ICustomTypeDescriptor
    {
    private DataRowView item;
    private string dataParentIdField;
    private string dataIdField;
    private string displayField;
    public InsHierarchyData(string dataParentIdField, string dataIdField,string displayField, DataRowView item)
    {
    this.item = item;
    this.dataParentIdField = dataParentIdField;
    this.dataIdField = dataIdField;
    this.displayField = displayField;
    }
    bool IHierarchyData.HasChildren
    {
    get
    {
    foreach (DataRowView row in item.DataView)
    {
    object[] array1 = row.Row.ItemArray;
    object[] array2 = item.Row.ItemArray;
    string a = row[dataParentIdField].ToString();
    string b = item[dataIdField].ToString();
    if (a == b)
    return true;
    }
    return false;
    }
    }
    object IHierarchyData.Item
    {
    get
    {
    return item;
    }
    }
    public override string ToString()
    {
    return item[displayField].ToString();
    }
    string IHierarchyData.Path
    {
    get
    {
    string path = "/*[position()=1]";
    GetPath(item, ref path);
    return path;
    }
    }
    void GetPath(DataRowView crow, ref string path)
    {
    foreach (DataRowView row in item.DataView)
    {
    string c, d;
    c = crow.Row.ItemArray[2].ToString();
    d = crow.Row.ItemArray[0].ToString();
    string a = crow[dataParentIdField].ToString();
    string b = row[dataIdField].ToString();
    if (a == b)
    {
    path = "/*[position()=1]" + path;
    }
    }
    }
    string IHierarchyData.Type
    {
    get { return displayField; }
    }
    IHierarchicalEnumerable IHierarchyData.GetChildren()
    {
    InsHierarchicalEnumerable children = new InsHierarchicalEnumerable();
    foreach (DataRowView row in item.DataView)
    {
    string a = row[dataParentIdField].ToString();
    string b = item[dataIdField].ToString();
    if (a == b)
    children.Add(new InsHierarchyData(dataParentIdField, dataIdField,displayField, row));
    }
    return children;
    }
    IHierarchyData IHierarchyData.GetParent()
    {
    foreach (DataRowView row in item.DataView)
    {
    string a = item[dataParentIdField].ToString();
    string b = row[dataIdField].ToString();
    if (a == b)
    return new InsHierarchyData(dataParentIdField, dataIdField,displayField, row);
    }
    return null;
    }
    System.ComponentModel.AttributeCollection ICustomTypeDescriptor.GetAttributes()
    {
    return TypeDescriptor.GetAttributes(this, true);
    }
    string ICustomTypeDescriptor.GetClassName()
    {
    return TypeDescriptor.GetClassName(this, true);
    }
    string ICustomTypeDescriptor.GetComponentName()
    {
    return TypeDescriptor.GetComponentName(this, true);
    }
    TypeConverter ICustomTypeDescriptor.GetConverter()
    {
    return TypeDescriptor.GetConverter(this, true);
    }
    EventDescriptor ICustomTypeDescriptor.GetDefaultEvent()
    {
    return TypeDescriptor.GetDefaultEvent(this, true);
    }
    PropertyDescriptor ICustomTypeDescriptor.GetDefaultProperty()
    {
    return TypeDescriptor.GetDefaultProperty(this, true);
    }
    object ICustomTypeDescriptor.GetEditor(Type editorBaseType)
    {
    return TypeDescriptor.GetEditor(this, editorBaseType, true);
    }
    EventDescriptorCollection ICustomTypeDescriptor.GetEvents(Attribute[] attributes)
    {
    return TypeDescriptor.GetEvents(this, attributes, true);
    }
    EventDescriptorCollection ICustomTypeDescriptor.GetEvents()
    {
    return TypeDescriptor.GetEvents(this, true);
    }
    PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties(Attribute[] attributes)
    {
    PropertyDescriptorCollection pds = TypeDescriptor.GetProperties(item);
    if (pds.Count > 0)
    {
    List<InsHierarchyDataPropertyDescriptor> list = new List<InsHierarchyDataPropertyDescriptor>();
    foreach (PropertyDescriptor pd in pds)
    {
    list.Add(new InsHierarchyDataPropertyDescriptor(pd.Name));
    }
    InsHierarchyDataPropertyDescriptor[] arr = new InsHierarchyDataPropertyDescriptor[list.Count];
    list.CopyTo(arr);
    return new PropertyDescriptorCollection(arr);
    }
    return PropertyDescriptorCollection.Empty;
    }
    PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties()
    {
    return ((ICustomTypeDescriptor)this).GetProperties(null);
    }
    object ICustomTypeDescriptor.GetPropertyOwner(PropertyDescriptor pd)
    {
    if (pd is InsHierarchyDataPropertyDescriptor)
    {
    return this;
    }
    return null;
    }
    }
    public class InsHierarchyDataPropertyDescriptor : PropertyDescriptor
    {
    private string name;
    public InsHierarchyDataPropertyDescriptor(string name)
    : base(name, null)
    {
    this.name = name;
    }
    public override string Name
    {
    get { return name; }
    }
    public override Type ComponentType
    {
    get
    {
    return typeof(InsHierarchyData);
    }
    }
    public override bool IsReadOnly
    {
    get
    {
    return true;
    }
    }
    public override Type PropertyType
    {
    get
    {
    return Type.GetType("System.String");
    }
    }
    public override bool CanResetValue(object o)
    {
    return false;
    }
    public override object GetValue(object o)
    {
    InsHierarchyData shd = o as InsHierarchyData;
    if (shd != null)
    {
    IHierarchyData hd = (IHierarchyData)shd;
    string subject = ((DataRowView)(hd.Item))[name].ToString();
    return subject;
    }
    return null;
    }
    public override void ResetValue(object o)
    {
    throw new NotSupportedException();
    }
    public override void SetValue(object o, object value)
    {
    throw new NotSupportedException();
    }
    public override bool ShouldSerializeValue(object o)
    {
    return true;
    }
    public override TypeConverter Converter
    {
    get { return TypeDescriptor.GetConverter(typeof(System.String)); }
    }
    }
    public class InsHierarchicalEnumerable : ArrayList, IHierarchicalEnumerable
    {
    IHierarchyData IHierarchicalEnumerable.GetHierarchyData(object enumeratedItem)
    {
    return (InsHierarchyData)enumeratedItem;
    }
    }
    public class InsHierarchicalDataSourceView : HierarchicalDataSourceView
    {
    string viewPath;
    InsTreeViewDataSource owner;
    public InsHierarchicalDataSourceView(InsTreeViewDataSource owner, string viewPath)
    {
    this.viewPath = viewPath;
    this.owner = owner;
    }
    public override IHierarchicalEnumerable Select()
    {
    //DataView dv = (DataView)this.owner.Select(DataSourceSelectArguments.Empty);
    DataView dv = (DataView)this.owner.DataView;
    InsHierarchicalEnumerable data = new InsHierarchicalEnumerable();
    bool hasParent = false;
    foreach (DataRowView crow in dv)
    {
    object[] array1 = crow.Row.ItemArray;
    hasParent = false;
    foreach (DataRowView prow in dv)
    {
    object[] array2 = prow.Row.ItemArray;
    //子节点
    string a = crow[owner.DataParentIdField].ToString();
    //根节点
    string b = prow[owner.DataIdField].ToString();
    if (a == b)
    {
    hasParent = true;
    break;
    }
    }
    //添加根节点
    if (!hasParent)
    data.Add(new InsHierarchyData(owner.DataParentIdField, owner.DataIdField, owner.DisplayField, crow));
    }
    return data;
    }
    }
    public class InsTreeViewDataSource : IHierarchicalDataSource
    {
    private InsHierarchicalDataSourceView view = null;
    private string parentIdField;
    private string idField;
    private DataTable dataSource;
    private string displayField;
    public InsTreeViewDataSource(string parentIdField, string idField, string displayField,DataTable dataSource)
    {
    this.parentIdField = parentIdField;
    this.idField = idField;
    this.displayField = displayField;
    this.dataSource = dataSource;
    }
    public DataView DataView
    {
    get
    {
    return this.dataSource.DefaultView;
    }
    }
    HierarchicalDataSourceView IHierarchicalDataSource.GetHierarchicalView(string viewPath)
    {
    if (null == this.view)
    this.view = new InsHierarchicalDataSourceView(this, viewPath);
    return this.view;
    }
    public string DataParentIdField
    {
    get { return parentIdField; }
    set { parentIdField = value; }
    }
    public string DataIdField
    {
    get { return idField; }
    set { idField = value; }
    }
    public string DisplayField
    {
    get { return displayField; }
    set { displayField = value; }
    }
    public event EventHandler DataSourceChanged;
    }
    客户端代码:
    DataTable dt = null;//自定义数据源
    InsTreeViewDataSource dataSource = new InsTreeViewDataSource("Parent_Id", "ID", "FULL_NAME", dt);
    this.itvTree.DataSource = dataSource;
    this.itvTree.DataBind();

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告