2012-07-12 47 views
1

我需要建立一個breadscrum /路徑爲一療程上市現場遞歸菜單生成器C#

如課程都有不同的菜單項目,我需要顯示然後如下

  • CHAPTER01/
  • CHAPTER01/Lesson01/
  • CHAPTER01/Lesson01/Exam01/
  • CHAPTER01/Lesson01/Exam01 /問題03/
  • CHAPTER01/Lesson0 1/Exam01 /問題04 /項目01
  • CHAPTER01/Lesson02/
  • Chapter02
  • Chapter02/Lesson01

以上僅僅是項目如何能得到安排的路徑爲例

爲了想出這個我有一個項目的名單

Public Class Item 
{ 
    public string Level 
    { 
     get; 
     set; 
    } 

    public string Title 
    { 
     get; 
     set; 
    } 
} 

列表可以如下創建

IList<Item> Items = new List<Item>(); 
Items.Add (new Item {Level = "0", Title = "Chapter01"}); 
Items.Add (new Item {Level = "1", Title = "Lesson01"}); 
Items.Add (new Item {Level = "2", Title = "Exam01"}); 
Items.Add (new Item {Level = "3", Title = "Question 03"}); 
Items.Add (new Item {Level = "3", Title = "Question 04"}); 
Items.Add (new Item {Level = "4", Title = "Item 01"}); 
Items.Add (new Item {Level = "1", Title = "Lesson02"}); 

Items.Add (new Item {Level = "0", Title = "Chapter02"}); 
Items.Add (new Item {Level = "1", Title = "Lesson01"}); 

父項目總會有水平爲0和孩子將有1,2,3等..

誰能掌舵我拿出一個遞歸函數C#實現這個

+1

項目類應該有ID和父ID屬性。所以你確切知道哪個項目屬於哪個項目。一旦你這樣做了,發佈一些你試過的代碼。 – 2012-07-12 20:58:09

+0

其實這個對象沒有id和父id的屬性。它只有級別屬性。級別0是父節點級別1,是級別0的子級,級別2是級別1的子級等等。 – Coder 2012-07-13 18:02:16

+0

在您的示例中,您有2個級別零。那麼Lesson01是根據Chapter01還是Chapter02?現在你唯一的選擇是遵循鄧肯的想法。 – 2012-07-14 01:18:57

回答

2

我最後的做法是將菜單項組合成一個菜單項。例如:

public class MenuItem{ 
    public string Caption {get; set;} 
    public int Level {get; set; } 
    public List<MenuItem> MenuItems {get; set;} 
    public MenuItem(string caption){ 
     Caption = caption; 
     MenuItems = new List<MenuItem>(); 
    } 
} 

然後,當你建立你的菜單結構,你開始一個List<MenuItem>將舉行您頂層菜單項的對象,然後MenuItems.Add(new MenuItem("Question 1"))

當你已經建立了您的層次結構,您可以將其使用類似的輸出:

private void DisplyMenuStructure(List<MenuItems> menu){ 
    foreach(MenuItem currentItem in menu){ 
     if (currentItem.MenuItems.Count>0){ 
      DisplayMenuStructure(currentItem.MenuItems); 
     } else { 
      Console.WriteLine(currentItem.Caption); 
     } 
    } 
} 

要填充層次使用這樣的事情:

public void BuildMenumStructure(){ 
    //Instantiate a File menu 
    MenuItem root = new MenuItem("File"); 
    root.Level = 0; 
    //Add some menu items 
    root.MenuItems.Add(new MenuItem("New"){Level = 1}); 
    root.MenuItems.Add(new MenuItem("Edit"){Level = 1}); 
    //Build a save menu and add it in 
    MenuItem saveMenu = new MenuItem("Save"); 
    saveMenu.MenuItems.Add(new MenuItem("Save As"){Level = 2}); 
    saveMenu.MenuItems.Add(new MenuItem("Save"){Level = 2}); 
    root.MenuItems.Add(saveMenu); 
} 
+0

感謝您的帖子。層次結構如我在我的例子中解釋的那樣。對不起,我不明白這段代碼。你能解釋一下嗎? – Coder 2012-07-13 18:05:03

+0

這個類實際上代表了菜單結構中的菜單選項。如果該菜單選項具有子選項,則它們將被添加到父項的MenuItems屬性中。如果您想爲課程添加一個關卡屬性,那很容易。我將編輯我的代碼並重新發布。 – 2012-07-17 19:24:01