2013-01-16 74 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