树视图。美国各州和城市

时间:2010-01-25 00:59:20

标签: c#

我有一个列表视图,我必须填充状态作为根节点,城市作为子节点。这是一项繁琐的工作。

我有Dictionary<String,List<String>>并且这样做。

Dictionary<string, List<String>> locations = new Dictionary<string, List<String>>();

List<String> alabama = new List<String>();
alabama.add("city1");
alabama.add("city2");
alabama.add("city3");

....

locations.add("alabama",alabama);

....

为每个州和城市做这件事都很烦人,我只是无法帮助,但认为有一种更简单的方法。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

使用collection initializer语法和数组而不是列表可以减少击键次数:

var locations = new Dictionary<string, string[]>
{
    { "alabama", new[] { "city1", "city2", "city3", ... } },
    ...
}

答案 1 :(得分:1)

创建一个包含状态/城市信息的xml文件并阅读它以进行树视图填充会更好。这样你就可以编写两个foreach循环来解析你的xml文件。

您可以将XML文件作为资源嵌入到项目中,这样就不会将其保留在文件系统上,如果您感觉非常幸运,可以使用linq解析它。

Dictionary<string, List<String>> locations = new Dictionary<string, List<String>>();  
//read XML into business object here.
foreach(var state in xml.States)
{
    List<String> lst = new List<String>();
    foreach(var city in state.Cities)
    {
         lst.add(city);
    }
    locations.add(state, lst);
}

这样做的好处是你可以在没有代码更改的情况下更新状态列表,只会更改XML文件。根据应用程序的结构,如果有意义,您甚至可以从Web服务中提取此列表。

答案 2 :(得分:0)

var locations = new Dictionary<string, List<string>>{
    { "Alabama", new List<string> {
        "City 1", "City 2", "City 3"
    } },
    { "Alaska", new List<string> {
        "City 14", "City 15"
    } }
};