2013-01-16 71 views
0

一個TreeNode我有一個表,伊利諾伊州作爲其葉和samething值爲「2」 ......通過這樣做我得到3「頭一個」節點,而不是一個具有下所有的三個節點...創建列表

enter image description here

SqlCommand cmd = con.CreateCommand(); 

     comd.CommandText = "SELECT * FROM myTable"; 
     con.Open(); 
     SqlDataReader reader = comd.ExecuteReader(); 
     while (reader.Read()) 
     { 
      City MyData = new City(); 

      MyData.ListA = reader["ListA"].ToString().Trim(); 
      MyData.labelName = reader["labelName"].ToString().Trim(); 
      giveData.Add(MyData); 
     } 

     int count = 1; 

     List<TreeNode> myNode = new List<TreeNode>(); 
     foreach (City MyData in giveData) 
     { 
      // 1st foreach 
       if (MyData.ListA != "1") 
       { 

        TreeNode treeNode = new TreeNode(); 
        treeNode.id = count++; 
        treeNode.name = "Header One"; 
        treeNode.leaf = false; 

        List<TreeNode> Level1 = new List<TreeNode>(); 
        foreach (City labelName in giveData) 
        { 
         if (labelName.ListA == "1") 
         {// 2nd foreach 
          TreeNode node1 = new TreeNode(); 
          node1.id = count++; 
          node1.name = labelName.labelName; 
          node1.leaf = true; 

          Level1.Add(node1); 
         } 
        } 

        treeNode.children = Level1; 
        myNode.Add(treeNode); 
      } 
      else if (MyData.ListA != "2") 
       { 

        TreeNode treeNode = new TreeNode(); 
        treeNode.id = count++; 
        treeNode.name = "Header Two"; 
        treeNode.leaf = false; 

        List<TreeNode> Level1 = new List<TreeNode>(); 
        foreach (City labelName in giveData) 
        { 
         if (labelName.ListA == "2") 
         {// 2nd foreach 
          TreeNode node1 = new TreeNode(); 
          node1.id = count++; 
          node1.name = labelName.labelName; 
          node1.leaf = true; 

          Level1.Add(node1); 
         } 
        } 

        treeNode.children = Level1; 
        myNode.Add(treeNode); 
      } 
     } 
     return JsonConvert.SerializeObject(myNode); 

什麼 將是處理此問題的最佳方法

回答

1

您需要做的是將數據分組在ListA上。

var groups = giveData.GroupBy(state => state.ListA); 

foreach(var group in groups) 
{ 
    //add header to treeview 
    string header = group.Key; 

    foreach(var state in group) 
    { 
     //add this state as a child of the group you just added 
    } 
} 

我也建議創建一個查詢,以幫助你映射了ListA數到它的文字表述:

var headerLookup = new Dictionary<string, string>() 
{ 
    {"1", "Header One"}, 
    {"2", "Header Two"}, 
    {"3", "Header Three"} 
}; 

這將允許你做到以下幾點:

string headerText = headerLookup[group.Key]; 
+0

謝謝塞維...我仍然無法獲得分組權利......還有headerText似乎不喜歡關鍵部分...你會通過任何改變有這樣的工作示例... – EagleFox

+0

@EagleFox說「它沒有不工作「沒有任何意義。如果您收到錯誤消息,請說明它是什麼。您還沒有提供足夠的代碼來編寫我可以編譯的代碼,但這至少與您想要的幾乎完全相同,您只需根據未提供的信息進行小修改即可。 – Servy

+0

謝謝Servy ...我不是故意說你的答案不起作用...我的意思是你提到的groupBy方法仍然給出相同的3個節點......沒有錯誤......雖然我能夠通過使用字典來實現這一目標......並且對於文本表示,我只是使用了case語句......感謝您的幫助,儘管...您在答案中提到了字典,我想爲什麼不把它用於我的整個列表: ) – EagleFox