绑定ASP.. NET TreeView控件到数据集
本文关键字:数据集 控件 TreeView ASP NET 绑定 | 更新日期: 2023-09-27 18:15:06
在MSDN中,他们说关于TreeView控件(" Binding to data ")段):
TreeView控件也可以绑定到XmlDocument对象或具有关系的数据集对象。要绑定到其中一个数据源,将TreeView控件的DataSource属性设置为数据
所以在一个简单的WebForms页面只有一个TreeView,我写:
DataSet ds = new DataSet();
DataTable dt = new DataTable("Masters");
ds.Tables.Add(dt);
dt.Columns.Add("MasterId", typeof(Int32));
dt.Columns.Add("Name", typeof(String));
DataTable dt1 = new DataTable("Details");
ds.Tables.Add(dt1);
dt1.Columns.Add("DetailId", typeof(Int32));
dt1.Columns.Add("MasterId", typeof(Int32));
dt1.Columns.Add("Name", typeof(String));
DataRow rw;
DataRow rw1;
for (int i = 0; i < 5; i++)
{
rw=dt.NewRow();
dt.Rows.Add(rw);
rw["MasterId"] = i;
rw["Name"] = "Master Name " + i.ToString();
for (int j = 0; j < 10; j++)
{
rw1 = dt1.NewRow();
dt1.Rows.Add(rw1);
rw1["DetailId"] = i * 5 + j;
rw1["MasterId"] = i;
rw1["Name"] = "Detail Name " + j.ToString() + " of Master Name "+ i.ToString();
}
}
ds.Relations.Add(new DataRelation("Masters_Details",dt.Columns["MasterId"], dt1.Columns["MasterId"]));
TreeView1.DataSource = ds;
TreeView1.DataBind();
但是在我设置DataSource的行中,它抛出异常:
HierarchicalDataBoundControl只接受实现IHierarchicalDataSource或IHierarchicalEnumerable的数据源。
我理解这是因为DataSet没有实现这样的接口…那么,为什么他们写的是可以绑定到一个有关系的数据集呢?提前谢谢大家
这段代码展示了如何从分层表转换为TreeView。这里没有什么复杂的东西,但需要一些技巧才能使其工作。
第一个技巧是按ParentID对记录进行排序。除非父节点在树中,否则不能将节点插入到树中。这意味着必须首先插入树的根节点的特殊情况,因为它没有父节点。下面是示例数据:
// Create the DataTable and columns
DataTable ItemTable = new DataTable("MyTable");
ItemTable.Columns.Add("ID" , typeof(int ));
ItemTable.Columns.Add("ParentID", typeof(int ));
ItemTable.Columns.Add("Name" , typeof(String));
// add some test data
ItemTable.Rows.Add(new object[] { 0,-1, "Bill Gates" });
ItemTable.Rows.Add(new object[] { 1, 0, "Steve Ballmer" });
ItemTable.Rows.Add(new object[] { 3, 1, "Mary Smith" });
ItemTable.Rows.Add(new object[] { 2, 0, "Paul Allen" });
ItemTable.Rows.Add(new object[] { 4, 2, "Ahmed Jones" });
ItemTable.Rows.Add(new object[] { 5, 2, "Wing Lee" });
// Use the Select method to sort the rows by ParentID
DataRow[] SortedRows;
SortedRows = ItemTable.Select("", "ParentID");