将 ASP.NET TreeView 绑定到 DataSet 或 ObjectDataSource






4.70/5 (16投票s)
TreeView 无法直接绑定到 DataSet 或 ObjectDataSource。现在,只需一行代码即可实现。
引言
ASP.NET 中的 TreeView
是一种强大的控件,可帮助显示分层数据。但是,与其他控件不同,它不支持绑定到 DataSet
或 ObjectDataSource
。我见过很多开发者采用老式方法,以编程方式填充树,这既浪费时间又浪费精力。
解决方案
此解决方案的关键在于 TreeView
可以绑定到实现 IHierarchicalDataSource
接口的任何对象。因此,本文向您介绍一个小型类,它将 DataSet
作为输入,并返回一个实现 IHierarchicalDataSource
的对象,以便 TreeView
可以轻松地与您的 DataSet
绑定。
幕后
HierarchicalDataSet
类以层次结构呈现数据,这意味着支持父子关系,就像 TreeView
控件的本质一样。您拥有节点,在某些节点下,您拥有子节点。在数据库中创建此结构涉及让表引用自身以实现父子关系。以下是这样的表的外观
这里有一个快速示例,用于显示一些记录,以了解它们将如何呈现父子关系
DataRow row = dataSet.Tables[0].NewRow();
row["ID"] = 1;
row["Text"] = "Parent 1";
dataSet.Tables[0].Rows.Add(row);
row = dataSet.Tables[0].NewRow();
row["ID"] = 2;
row["Text"] = "Parent 2";
dataSet.Tables[0].Rows.Add(row);
row = dataSet.Tables[0].NewRow();
row["ID"] = 3;
row["ParentID"] = 1;
row["Text"] = "Child 1";
dataSet.Tables[0].Rows.Add(row);
row = dataSet.Tables[0].NewRow();
row["ID"] = 4;
row["ParentID"] = 1;
row["Text"] = "Child 2";
dataSet.Tables[0].Rows.Add(row);
row = dataSet.Tables[0].NewRow();
row["ID"] = 5;
row["ParentID"] = 2;
row["Text"] = "Child 3";
dataSet.Tables[0].Rows.Add(row);
row = dataSet.Tables[0].NewRow();
row["ID"] = 6;
row["ParentID"] = 2;
row["Text"] = "Child 4";
dataSet.Tables[0].Rows.Add(row);
Using the Code
使用代码非常简单。您需要调用接受 DataSet
和两个列名的类的构造函数。主键和外键引用同一个表。
TreeView1.DataSource = new HierarchicalDataSet(dataSet, "ID", "ParentID");
希望这有所帮助。
历史
- 2008 年 5 月 2 日:初始版本