7

MSDN中,他们谈到了 TreeView 控件(“绑定到数据”段落):

TreeView 控件也可以通过关系绑定到 XmlDocument 对象或 DataSet 对象。若要绑定到这些数据源之一,请将 TreeView 控件的 DataSource 属性设置为数据源,然后调用 DataBind 方法。

因此,在一个只有 TreeView 的简单 WebForms 页面中,我写道:

     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 没有实现这样的接口......那么他们为什么写可以绑定到“具有关系的 DataSet”?先感谢您

4

1 回答 1

-1

此代码显示如何从分层表转到 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");

希望这个对你有帮助,

于 2013-05-28T04:14:57.860 回答