手机
当前位置:查字典教程网 >编程开发 >asp.net教程 >TreeView创建IHierarchicalDataSource类型的数据源实现
TreeView创建IHierarchicalDataSource类型的数据源实现
摘要:IHierarchicalDataSource实现:publicclassInsHierarchyData:IHierarchyData,I...

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类型的数据源实现】相关文章:

C# 无限级分类的实现

SQL Server 2005安装过程中出现错误的解决办法

aspx如果引用cs中的变量的方法

asp.net小孔子cms中的数据添加修改

ASP.Net全局变量的设置和读取方法

ASP.NET中上传并读取Excel文件数据示例

.Net连接Oracle数据库的实现代码

asp.net Execl的添加,更新操作实现代码

asp.net datalist绑定数据后可以上移下移实现示例

asp.net中IDataParameter调用存储过程的实现方法

精品推荐
分类导航