问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C# treeview 与datagridview 如何实现这样的功能:现在有一个treeview和一个datagridview

发布网友 发布时间:2022-04-27 17:02

我来回答

3个回答

懂视网 时间:2022-04-27 21:24

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();

热心网友 时间:2022-04-27 18:32

你的代码仅仅是将当前选中的树节点的对应数据放入了datagridview的数据源datatable中,这个数据源是你根据树节点查询得到的,所以datatable也就只包含了满足当前查询条件的数据。
你应该这么做:
1、建立一个datatable作为datagridview数据源,这个表只用来做临时存储表,负责将满足查询条件的数据添加到其中,不满足条件的从中删除
2、通过维护上面的表,最后再将这个表绑定到datagridview的数据源datasource上。

热心网友 时间:2022-04-27 19:50

一、首先声明全局的datatable做临时的储存表
二、当每次点击treeView1节点时treeView1_AfterCheck事件中先将选中节点的信息读取出来,然后将读取的出来的数据追加放入临时表
三、最后,将临时表的数据显示出来,就OK了
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
iphone4被偷/被盗/丢失了后怎么办呢? 韩语对话:被盗的经验和防御方法 ipad2在飞机上丢失,有什么方法可以找回来吗?ipad的条码是:MC979ZP/A... ...被抓到并报案,公安机关应该怎样处理案件,被偷2万元左右的财物是否... (1/2)刚才在交车上我的钱包被偷了里面有刚办好的2万定期存单和身份证和... 老丢东西/钱如何转运 我用eXeScope修改资料后qq怎么打不开了 肚子针打完后用湿棉签按住药水会不会流出来 怎样给别人打针才不会痛? 打完新冠疫苗棉签要按压多久? 本科第三批征求平行志愿录取时间是今天截止吗 2008年黑龙江高考报考时间安排是怎样的 2017年黑龙江高考专科志愿填报时间 什么时候填报志愿 2015年黑龙江省什么时间填报志愿 高考志愿什么时候填报? 第二批=二本?三本? 现在三本还有么? 应怎么填好呢? 黑龙江2011第三批次什么时候填报 摄像机逐行扫描功能有什么用 2015年黑龙江高考三本什么时候报志愿 黑龙江省第三批次填报志愿时间 2016黑龙江高考填报志愿第三批次什么时间 一个由多个相同的字组成的字有哪些?如:木林森,人从众 孤房儿子傻,闹市出人精,有何含义? 人从众,森林木什么意思? 鱼渔余不清,人从众难辨,诗与远方梦境,苟且当下是什么意思 微信名人从众Fa什么意思? 难为人从众 何以木林森 什么意思 人从众,挤出一片天地是什么意思? 人从众 这三个字谁能明白其中的意思 人从众是什么意思 人从众&#x020C;的读音? 销售保险产品的PPT 怎样做保险推销员.ppt 四川双马水泥股份有限公司的历史沿革 四川双马公司简介,有人知道吗? 四川双马是干啥的? 四川双马是什么概念,000935是什么概念 四川双马公司前景如何? 四川双马做什么的? 四川双马主要做什么的 四川双马经营范围有哪些? 四川双马现在情况怎么样 四川双马是属于什么关系 四川双马持有建议,有大神说下吗? 四川双马是什么意思 近几个交易日四川双马连续涨的原因 cad怎么彩色打印 贝克汉姆资料! 罗密欧·贝克汉姆的介绍 今年的圣诞节是几号? 谁有小贝的资料呀,月详细越好