绑定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没有实现这样的接口…那么,为什么他们写的是可以绑定到一个有关系的数据集呢?提前谢谢大家

绑定ASP.. NET TreeView控件到数据集

这段代码展示了如何从分层表转换为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");