2009-04-19 54 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