2014-09-25 57 views
0
I have create table in database name"Group" contains ID,Rank,Name like this: 
    ID RANK NAME 
    1  A  Main 
    2  A1  Departments 
    3  A2  Companies 
    4  A3  Usres 
    5  I  Invoice 
    6  T  Tools 
    7  T1  ChangPswd 
    8  T2  ChangLanguage 
when I try this query get the same result 

我該如何讓'A + T'is parent(A1,A2,A3,T1,T2)是childnode? (在同一個表中) SELECT排名,名稱, 排名()排序(按排名排序)排名 從組 排序方式ID;TreeView如何做到這一點?

//in formLoad 
{ 
DataTable dt; 
DBAccess db = new DBAccess(); 
dt = db.ExcuteDataTable("SELECT Name FROM Group") 
foreach (DataRow dr in dt.Rows) 

     { 
      parentNode = Tree.Nodes.Add(dr["Name"].ToString()); 
     } 

how can i make 'A+T'is parent and (A1,A2,A3,T1,T2) is childnode? (in the same table) 
+0

我會建議如果可能的話改變你的表的架構。將Rank字段更改爲一個int,該int是同一個表上ID字段的外鍵。然後,您可以通過內部加入表格來輕鬆選擇節點的子節點。 – 2014-09-25 23:31:53

回答

0

我想你可以用硬編碼做到這一點,我不同意這種看法,而不是它,你可以添加另一列名爲家長識別家長爲每個孩子。

但回答你的問題

您可以先創建A,T節點,然後用串

foreach (DataRow dr in dt.Rows) 
{ 
    if(dr["Name"].ToString().Trim() != "A" && dr["Name"].ToString().Trim() != "T") 
    { 
    if(dr["Name"].ToString().SubString(1,1) == "A") 
    { 
      parentNodeA = Tree.Nodes.Add(dr["Name"].ToString()); 
    } 
    else if(dr["Name"].ToString().SubString(1,1) == "T") 
    { 
      parentNodeT = Tree.Nodes.Add(dr["Name"].ToString()); 
    } 
    } 
} 

尋找他們的childNodes或者,如果你指的A,T爲例,你可以有更多的parentnodes像I,F,L可以識別父母與lenght,

Private Sub populateNodes(dt as DataTable) 
{ 
    populateParentNodes(dt); 

    foreach (DataRow dr in dt.Rows) 
    { 
    if(dr["Name"].ToString().Trim().Lenght() > 1) 
    { 
     Tree.Nodes.FindNodeByName(dr["Name"].ToString().SubString(1,1)).Add(dr["Name"].ToString()); 
    } 
    } 
} 

Private Function populateParentNodes(DataTable dt) 
{ 
    foreach (DataRow dr in dt.Rows) 
    { 
    if(dr["Name"].ToString().Trim().Lenght() == 1) 
    { 
     Tree.Nodes.Add(dr["Name"].ToString()); 
    } 
    } 
} 

我沒有測試的代碼,因爲我寫的whitout的IDE,但我希望它可以幫助你

問候