时间:2016-02-16 00:05 来源: 我爱IT技术网 作者:佚名
欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【TreeView创建IHierarchicalDataSource类型的数据源实现】,下面是详细的讲解!
TreeView创建IHierarchicalDataSource类型的数据源实现
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();
关于TreeView创建IHierarchicalDataSource类型的数据源实现的用户互动如下:
相关问题:
答: >>详细
相关问题:
答: >>详细
相关问题:
答: >>详细
- 【asp】asp.net url重写浅谈-net-url重写
- 【DataSet】DataSet、DataTable、DataRow区别详解
- 【asp】asp.net 动态添加多个用户控件-net-动态添
- 【ASP】ASP.NET中内嵌页面代码的一个问题-NET-内
- 【创建】ASP.NET Web API教程 创建域模型的方法详
- 【Asp】Asp.net 页面调用javascript变量的值-net-
- 【ASP】ASP.NET 5升级后如何删除旧版本的DNX-NET5
- 【404页面】ASP.NET设置404页面返回302HTTP状态码
- 【asp】asp.net开发中常见公共捕获异常方式总结(
- 【Visual】分享Visual Studio原生开发的10个调试
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
