vs2010中treeview控件绑定数据winform界面怎么绑定?要求有例子和代码

 我来答
百度网友1b491e1
2012-06-04 · TA获得超过1036个赞
知道小有建树答主
回答量:497
采纳率:0%
帮助的人:550万
展开全部
官方版本treeview的确比较麻烦,没有提供对应的数据源绑定功能,一般需要递归遍历(WPF下好点有所谓的MVVM,提供了一个treeview专用的数据接口,你ViewModel里实现这个接口就可以直接绑定),非官方的treeview控件一般有数据绑定扩展,比如radtreeview。

我在net4下写了两个扩展,你看着用把

namespace Hycommon
{
public static class TreeViewEx
{

//对已经实现层级组件模式的数据操作
public static void makeTreeView<T, TNode>(this IEnumerable<T> list,//层级数据源
IEnumerable tds, //treeview节点集合,也就是Treeview.nodes
Func<T, IEnumerable<T>> funSource, //因为数据本身具有层级,所以需要知道如何访问下级数据
Func<T, TNode> funConvert, //把T数据绑定到treenode上
Func<TNode, IEnumerable> ChirldFun //如何访问treenode的子节点
)
{
foreach (var item in list)
{
TNode td = funConvert(item);
var source = funSource(item);
dynamic d_tds = tds;
d_tds.Nodes.Add(td);
source.makeTreeView(ChirldFun(td), funSource, funConvert, ChirldFun);
}

}

//对非层级组件数据操作
public static void makeTreeView<TSource, TID, TNode>(
this IEnumerable<TSource> list,//原始数据源
IEnumerable tds, //treeview节点集合

Func<TSource, TID> FunID, //获取数据id
Func<TSource, TID> funParentID,//获取父节点编号
Func<TSource, TNode> funConvert, //转换为treenode
Func<TNode, IEnumerable> ChirldFun,//如何访问treenode的下级节点集合
decimal parentId = 0 //初始访问节点,默认为0
) where TID : struct
{

var tlist = list.Where(c => Convert.ToDecimal(funParentID(c)) == parentId);
foreach (var item in tlist)
{
TNode td = funConvert(item);
dynamic d_tds = tds;
d_tds.Nodes.Add(td);
list.makeTreeView(ChirldFun(td), FunID, funParentID, funConvert, ChirldFun,Convert.ToDecimal(FunID(item)));
}

}

}
}

调用方式
//层级数据调用
List<T> x=new List<T>();
x.makeTreeView<T,TreeNode>(Treeview1.Nodes,p=>p.Chirlds,p=>new TreeNode(){Text=p.name,Tag=p},p=>p.Nodes);

非层级调用

List<T> x=new List<T>();
x.makeTreeView(treeview1.Nodes,p=>p.id,p=>p.parentid,p=>new treenode(){Text=p.name,Tag=p},p=>p.Nodes,0)
追问
老大 我只需要绑定Sql数据库的表就行了 别给我这么麻烦的啊
追答
呵呵,绑定数据库表你就用第二个非层级数据即可

你总有id,和父id两个字段把,按上面的调用改就是

datatable dt=new datatable() //怎么获取数据到dt不用我写把

dt.AsEnumerable().makeTreeView(treeview1.Nodes,p=>Convert.ToInt32(p["id"]),p=>Convert.ToInt32(p.parentid),p=>new treenode(){Text=p["需要显示的字段"],Tag=p},p=>p.Nodes,0)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式