2013-06-27 91 views
0

下面是我需要它的更好的解釋,我認爲是完成了大部分的部分,但我只是無法弄清楚在ViewMode。如果有人能幫助我,請賜教!Asp.net填充樹視圖linq到實體

我有一個關鍵字列表(概述),我想編輯/插入並查看與特定關鍵字相關的信息或插入一個新關鍵字。 關於此插入,編輯和查看的詳細關鍵字頁面,我必須顯示一個樹形視圖,類別和主題,父節點是類別和 兒童主題。用戶可以檢查任何這些主題(基於複選框的樹形視圖)以將選定的關鍵字與這些主題相關聯。 例如對於科學類我有主題數學,物理,地理,如果我想關鍵字幾何,我可以檢查樹視圖 數學。在查看模式下,我只需要顯示選定的主題和類別父項,但插入和編輯必須顯示所有主題並檢查主題。

我有這樣的實體和導航屬性和數據例如:

實體選項(OptionId,的ParentId,描述虛擬導航屬性KeyWordOptions) KeyWordOption(OptionId,KeywordID,虛擬導航屬性選項)

Option Entity 
     OptionId ParentID Description 
     1   0   Informatics 
     2   1   Development 
     3   0   Architecture 
     4   1   Systems 
     5   1   Hardware 
     6   3   Civil Engineering 
     7   1   Software 


    KeyWordOption Entity 
     OptionId KeywordID ID KeywordDescription 
     1   8   8 Visual Studio 
     2   8   2 Autocad 
     4   2   5 Monitor 
     5   5   9 Eclipse 
     2   9 
     7    8 
     7    2 
     7    9 



Result Would be for Eclipse keyword(id = 9) at EditMode: 

Informatics 
    Development (checked) 
    System  
    Hardware 
    Software (checked) 
Architecture 
    Civil Engineering 

結果將是在VIEWMODE Eclipse的關鍵字(ID = 9):

Informatics 
    Development (checked) 
    Software (checked) 

我的代碼是:

BindTreeView(OptionList,null);

private void BindTreeView(IEnumerable<Opcion> OptionList, TreeNode parentNode) 
     { 
      var nodes = OptionList.Where(x => parentNode == null ? x.ParentID == 0 : x.ParentID == int.Parse(parentNode.Value)); 

      if (mode != FormViewMode.View) 
      { 
       foreach (var node in nodes) 
       { 
        TreeNode newNode = new TreeNode(); 
        newNode.Text = node.Description.ToString(); 
        newNode.Value = node.OptionID.ToString(); 

        if (parentNode == null) 
        { 
         TreeViewOptions.Nodes.Add(newNode); 
        } 
        else 
        { 
         if (node.KeyWordOptions.Where(c => c.KeywordID == _idKeyWord).Count() > 0) 
         { 
          newNode.Checked = true; 
          parentNode.Expand(); 
         } 
         parentNode.ChildNodes.Add(newNode); 
        } 
        BindTreeView(OptionList, newNode);    
       } 

      } 
      else 
      { 
       foreach (var node in nodes) 
       { 
        TreeNode newNode = new TreeNode(); 
        newNode.Text = node.Descripcion.ToString(); 
        newNode.Value = node.OpcionID.ToString(); 

        if (parentNode == null && node.KeyWordOptions.Where(c => c.KeywordID == _idKeyWord).Count() > 0) 
        { 
         TreeViewOptions.Nodes.Add(newNode); 
        } 
        else 
        { 
         if (node.KeyWordOptions.Where(c => c.KeywordID == _idKeyWord).Count() > 0) 
         { 
          newNode.Checked = true; 
          parentNode.Expand(); 
         } 

         parentNode.ChildNodes.Add(newNode); 

        } 
        BindTreeView(OptionList, newNode); 
       } 

      } 


     } 
    } 

我不知道我必須做排除Nodes不匹配KeywordId

+0

歡迎來到StackOverflow!你可以編輯你的問題,包括更多的信息,特別是你有什麼問題,你已經嘗試了什麼,以及爲什麼它不工作 - 這將幫助我們更好地理解你的問題。 – Justin

回答

0

編輯

也許這在循環中的一個,那麼(你應該重構, 順便一提) ?

foreach (var node in nodes.Where 
      (x => x.KeyWordOptions.Any(k => k.KeywordId == _idKeyWord)); 
+0

但是在編輯和inser的情況下,我無法顯示與KeywordId無關的類別和主題,但是如果用戶想要添加關鍵字的新主題。 – user2528557

+0

@ user2528557哦,編輯/插入與「FormViewMode.View」有關?見編輯也許... –

+0

對於編輯和插入我顯示相同的,所有與cheked主題的樹,和視圖模式,只是那些被檢查。我對遞歸有點困惑。 – user2528557