2009-04-19 80 views
2

我想填充一个Treeview。最佳实践TreeView从不同种类的对象中填充

这是我在DB:

表:盒 BoxID BoxName

桌上的书: 的BookID BOOKNAME BoxID(FK Box.BoxID)

表章: ChapterID ChapterName BookID(fk Book.BookID)

正如您所知,树视图由treenode对象组成。 treenode对象具有文本属性和标签属性。 “text”属性是它在此节点的屏幕上显示的文本,“tag”是一个“隐藏”值(通常用于识别节点)

所以在我的情况下,以ID结尾的字段将用于“tag”属性中,以Name结尾的字段将用于“text”属性

示例: 对于书籍;我将使用“标记”属性的BookID字段和“文本”属性的BookName字段

注意:我使用dbml,因此我有一个Book对象,Box对象和Chapter对象,并使用linq来获取它们从数据库。

所以我的问题是,建立这棵树的最佳做法是什么?

我有一个解决方案,但它真的很丑,因为它看起来像我复制代码。 问题是,我需要为文本和标签属性提取的值由db中的differents字段名称标识

因此对于书籍级别,我需要获取BookID字段以填充我的标签属性节点;对于框级别,我需要获取BoxID字段来填充标记属性,....

我该如何制作一种通用的方式来做到这一点?

我希望我自己很清楚,请不要犹豫,问我的问题:)提前

THX

回答

1

这里是我的时刻

我得到框的列表与LINQ(DBML)请求。

List<Box> MyListofBox = getMyListofBox(); 
Treenode tnBox = null; 
Treenode tnBook =null; 
foreach(Box b in MyListofBox) 
{ 
    tnBox = new TreeNode(); 
    tnBox.tag = b.BoxID; 
    tnBox.text = b.BoxName; 

    List<Book> MyListofBook = getMyListofBookByBoxID(b.BoxID) 
    foreach(Book boo in MyListofBook) 
    { 
     tnBook = new TreeNode(); 
     tnBook.tag = boo.BookID; 
     tnBook.text = boo.BookName; 
     tnBox.nodes.add(tnBook); 
    } 
    mytreeview.nodes.add(tnBox); 
} 

但我当然不喜欢这种解决方案

你有更好的办法?

0

我会提取从数据库的结构形式,可能需要通过与linq一起添加到C#中的anonnoumous类型。然后我会填充这个数据到树中的地方。

从我得到的结果来看,你试图单独获取每个属性,这不会很好,因为那样你将不得不为每个单独的属性调用数据库,这非常浪费。根据您所添加的内容

加成

我不相信,代码可以更为紧凑 - 你叫的名字相似,但不一样的,你做的是什么,我试图方式先解释一下。

+0

我得到一个linq(dbml)请求框的列表。 我收到一个清单 Treenode tnBox = null; Treenode tnBook = null; foreach(MyListofBox中的Box b) { tnBox = new TreeNode(); tnBox.tag = b.BoxID; tnBox.text = b.BoxName; 列表 MyListofBook = getMyListofBookByBoxID(b.BoxID) 的foreach(在MyListofBook簿BOO) { tnBook =新树节点(); tnBook .tag = boo.BookID; tnBook .text = boo.BookName; tnBox.nodes.add(tnBook); } mytreeview.nodes.add(tnBox); } } – GillouX 2009-04-19 11:42:34

0

你可以

  1. 定义的键/值接口,这两个方块和图书落实
  2. 定义返回一个TreeNode的委托,并创建一个接受方块和图书

但是委托方法,我认为编写的代码很好。有时你只需编写代码,并且进一步抽象或优化它没有多大意义。

我在代码中看到的唯一问题是您正在循环中进行数据库调用。这是否是一个问题取决于应用程序。

+0

所以我想我会保持我的解决方案。不管怎么说,这个thx是 – GillouX 2009-04-26 10:26:05