如何从包含美国州的数据结构填充 C# 中的组合框

本文关键字:填充 组合 数据结构 包含 美国 | 更新日期: 2023-09-27 18:33:27

下面的链接显示了为使用组合框而创建的类。

标准化美国各州阵列和国家/地区阵列

static class StateArray
{
   static List<US_State> states;
   static StateArray()
   {
      states = new List<US_State>(50);
      states.Add(new US_State("AL", "Alabama"));
      states.Add(new US_State("AK", "Alaska"));
      states.Add(new US_State("AZ", "Arizona"));
      states.Add(new US_State("AR", "Arkansas"));
      states.Add(new US_State("CA", "California"));
      states.Add(new US_State("CO", "Colorado"));
      states.Add(new US_State("CT", "Connecticut"));
      states.Add(new US_State("DE", "Delaware"));
      states.Add(new US_State("DC", "District Of Columbia"));
      states.Add(new US_State("FL", "Florida"));
      states.Add(new US_State("GA", "Georgia"));
      states.Add(new US_State("HI", "Hawaii"));
      states.Add(new US_State("ID", "Idaho"));
      states.Add(new US_State("IL", "Illinois"));
      states.Add(new US_State("IN", "Indiana"));
      states.Add(new US_State("IA", "Iowa"));
      states.Add(new US_State("KS", "Kansas"));
      states.Add(new US_State("KY", "Kentucky"));
      states.Add(new US_State("LA", "Louisiana"));
      states.Add(new US_State("ME", "Maine"));
      states.Add(new US_State("MD", "Maryland"));
      states.Add(new US_State("MA", "Massachusetts"));
      states.Add(new US_State("MI", "Michigan"));
      states.Add(new US_State("MN", "Minnesota"));
      states.Add(new US_State("MS", "Mississippi"));
      states.Add(new US_State("MO", "Missouri"));
      states.Add(new US_State("MT", "Montana"));
      states.Add(new US_State("NE", "Nebraska"));
      states.Add(new US_State("NV", "Nevada"));
      states.Add(new US_State("NH", "New Hampshire"));
      states.Add(new US_State("NJ", "New Jersey"));
      states.Add(new US_State("NM", "New Mexico"));
      states.Add(new US_State("NY", "New York"));
      states.Add(new US_State("NC", "North Carolina"));
      states.Add(new US_State("ND", "North Dakota"));
      states.Add(new US_State("OH", "Ohio"));
      states.Add(new US_State("OK", "Oklahoma"));
      states.Add(new US_State("OR", "Oregon"));
      states.Add(new US_State("PA", "Pennsylvania"));
      states.Add(new US_State("RI", "Rhode Island"));
      states.Add(new US_State("SC", "South Carolina"));
      states.Add(new US_State("SD", "South Dakota"));
      states.Add(new US_State("TN", "Tennessee"));
      states.Add(new US_State("TX", "Texas"));
      states.Add(new US_State("UT", "Utah"));
      states.Add(new US_State("VT", "Vermont"));
      states.Add(new US_State("VA", "Virginia"));
      states.Add(new US_State("WA", "Washington"));
      states.Add(new US_State("WV", "West Virginia"));
      states.Add(new US_State("WI", "Wisconsin"));
      states.Add(new US_State("WY", "Wyoming"));
   }
   public static string[] Abbreviations()
   {
      List<string> abbrevList = new List<string>(states.Count);
      foreach (var state in states)
      {
         abbrevList.Add(state.Abbreviations);
      }
      return abbrevList.ToArray();
   }
   public static string[] Names()
   {
      List<string> nameList = new List<string>(states.Count);
      foreach (var state in states)
      {
         nameList.Add(state.Name);
      }
      return nameList.ToArray();
   }
   public static US_State[] States()
   {
      return states.ToArray();
   }
}

我从上面创建了一个名为USStates.cs的类,并将一个组合框拖到我的窗体上。这是一个WinForm应用程序。我不熟悉类以及如何引用它,以便我的组合框将填充美国各州......有人能帮忙吗?

这是我会在组合盒事件中输入的内容吗?

private void cbState_SelectedIndexChanged(object sender, EventArgs e)
{
//populate with US States from the USStates.cs class....
}

如何从包含美国州的数据结构填充 C# 中的组合框

您可以通过以下方式使用静态类 StaticArray:

static class StateArray
{
    static List<US_State> states;
    static StateArray()
    {
        states = new List<US_State>(50);
        states.Add(new US_State("AL", "Alabama"));
        states.Add(new US_State("AK", "Alaska"));
        states.Add(new US_State("AZ", "Arizona"));
        states.Add(new US_State("AR", "Arkansas"));
        states.Add(new US_State("CA", "California"));
        states.Add(new US_State("CO", "Colorado"));
        states.Add(new US_State("CT", "Connecticut"));
        states.Add(new US_State("DE", "Delaware"));
        states.Add(new US_State("DC", "District Of Columbia"));
        states.Add(new US_State("FL", "Florida"));
        states.Add(new US_State("GA", "Georgia"));
        states.Add(new US_State("HI", "Hawaii"));
        states.Add(new US_State("ID", "Idaho"));
        states.Add(new US_State("IL", "Illinois"));
        states.Add(new US_State("IN", "Indiana"));
        states.Add(new US_State("IA", "Iowa"));
        states.Add(new US_State("KS", "Kansas"));
        states.Add(new US_State("KY", "Kentucky"));
        states.Add(new US_State("LA", "Louisiana"));
        states.Add(new US_State("ME", "Maine"));
        states.Add(new US_State("MD", "Maryland"));
        states.Add(new US_State("MA", "Massachusetts"));
        states.Add(new US_State("MI", "Michigan"));
        states.Add(new US_State("MN", "Minnesota"));
        states.Add(new US_State("MS", "Mississippi"));
        states.Add(new US_State("MO", "Missouri"));
        states.Add(new US_State("MT", "Montana"));
        states.Add(new US_State("NE", "Nebraska"));
        states.Add(new US_State("NV", "Nevada"));
        states.Add(new US_State("NH", "New Hampshire"));
        states.Add(new US_State("NJ", "New Jersey"));
        states.Add(new US_State("NM", "New Mexico"));
        states.Add(new US_State("NY", "New York"));
        states.Add(new US_State("NC", "North Carolina"));
        states.Add(new US_State("ND", "North Dakota"));
        states.Add(new US_State("OH", "Ohio"));
        states.Add(new US_State("OK", "Oklahoma"));
        states.Add(new US_State("OR", "Oregon"));
        states.Add(new US_State("PA", "Pennsylvania"));
        states.Add(new US_State("RI", "Rhode Island"));
        states.Add(new US_State("SC", "South Carolina"));
        states.Add(new US_State("SD", "South Dakota"));
        states.Add(new US_State("TN", "Tennessee"));
        states.Add(new US_State("TX", "Texas"));
        states.Add(new US_State("UT", "Utah"));
        states.Add(new US_State("VT", "Vermont"));
        states.Add(new US_State("VA", "Virginia"));
        states.Add(new US_State("WA", "Washington"));
        states.Add(new US_State("WV", "West Virginia"));
        states.Add(new US_State("WI", "Wisconsin"));
        states.Add(new US_State("WY", "Wyoming"));
    }
    public static List<US_State> States()
    {
        return states;
    }
}

使用原始列表应该足以填充如下所示的 ComboBox 数据源:

this.comboBox1.DisplayMember = "Name";
this.comboBox1.ValueMember = "Abbreviations";
this.comboBox1.DataSource = StateArray.States(); 

假设您的US_State类如下所示:

public class US_State
{
    public string Name { get; set; }
    public string Abbreviations { get; set; }
    public US_State(string abbreviations, string name)
    {
        Abbreviations = abbreviations;
        Name = name;
    }
}

几种实用的方法可以通过将 ComboBox(或 DropDownList)绑定到各种数据结构来填充它,如文章中所述:将 ASP.NET DropDownList 绑定到数据结构 (http://www.codeproject.com/Tips/214418/Binding-DropDownList-to-various-data-structures)

根据您的情况,请考虑绑定到包含美国州缩写/州的字典对象,如以下代码片段所示;

  // create sample dictionary object containing US StateAbbreviations/States
            Dictionary<string,> dictStates = new Dictionary<string,>();
            dictCountries.Add("AL", "Alabama");
            dictCountries.Add("AK", "Alaska");
            dictCountries.Add("AZ", "Arizona");
            // the rest of the list
            // Method 1a: Data Binding DropDownList  `ddl2DictionaryDataBind` to Dictionary using DataSource and DataBind()
            ddl2DictionaryDataBind.DataSource = dictStates;
            ddl2DictionaryDataBind.DataTextField = "Value";
            ddl2DictionaryDataBind.DataValueField = "Key";
            ddl2DictionaryDataBind.DataBind();
            ddl2DictionaryDataBind.ToolTip = "Data Bind to Dictionary using Value/Key";
            // Method 1b. Data Binding DropDownList `ddl2DictionaryBindValues` to Dictionary (either Keys or Values)
            // using DataSource property of the DropDownList object. This method will
            // render the <select> HTML element with option values and inner HTML
            // both corresponding to Dictionary Values (it could be bound to Keys instead)
            // note: this method requires System.Linq reference
            ddl2DictionaryBindValues.DataSource = dictStates.Values.ToArray();
            ddl2DictionaryBindValues.DataBind();
            ddl2DictionaryBindValues.ToolTip = "Data Bind to Dictionary using only Values";
            // Method 1c. Data Binding DropDownList `ddl2DictionaryLoop` to Dictionary using iterations:
            // looping through the dictionary items and adding them to the DropDownList
            // this method will render the <select> HTML element with option values 
            // corresponding to Dictionary Keys and inner HTML corresponding to Values
            // note: if Dictionary contains data types other than String (for example, Dictionary<int,>)
            // then add the ToString() conversion to that data type
            ddl2DictionaryLoop.ToolTip = "Bind to Dictionary (Key/Values) using iteration";
            foreach (KeyValuePair<string,> _dictItem in dictStates)
            {
                ddl2DictionaryLoop.Items.Add(new ListItem(_dictItem.Value, _dictItem.Key));
            }

希望这会有所帮助。此致敬意

这可能是您想要的代码,但是您一无所获,因此请阅读提供的链接,直到您对自己正在做的事情感到满意为止

将以下内容放在表单中的某个位置,它假设您实际上已经创建了您所指向的类

private void InitStates()
{
    cbState.BeginUpdate();
    foreach(var state in StateArray.Names)
    {
        cbState.Items.Add(state);
    }
    cbState.EndUpdate();
}

BeginUpdate可以在这里阅读

foreach可以在这里阅读

ComboBox.Items可以在这里阅读

组合框一般可以在这里阅读,有很多很多例子

你可以像这样获得所有状态(使用 HtmlAgilityPack):

public void GetStates()
{
    var wc = new WebClient {Proxy = null};
    var webDoc = new HtmlAgilityPack.HtmlDocument();
    webDoc.LoadHtml(wc.DownloadString("http://goo.gl/2R4ne1"));
    foreach (var descendents in webDoc.DocumentNode.SelectNodes("//tr").Skip(1).Take(50)
        .Select(i => i.Descendants("td").ToList()))
        _allStates.Add(new State(descendents[0].InnerText, descendents[1].InnerText));
}

除此之外,您可以使用我编写的这段代码:

    private readonly List<State> _allStates = new List<State>();
    private void button1_Click(object sender, EventArgs e)
    {
        GetStates();
        _allStates.ForEach(i => comboBox1.Items.Add(i.ToString()));
    }
    public void GetStates()
    {
        var wc = new WebClient {Proxy = null};
        var webDoc = new HtmlAgilityPack.HtmlDocument();
        webDoc.LoadHtml(wc.DownloadString("http://goo.gl/2R4ne1"));
        foreach (var descendents in webDoc.DocumentNode.SelectNodes("//tr").Skip(1).Take(50)
            .Select(i => i.Descendants("td").ToList()))
            _allStates.Add(new State(descendents[0].InnerText, descendents[1].InnerText));
    }
    public class State
    {
        public State(string ab, string name)
        {
            Name = name;
            Abbreviation = ab;
        }
        public string Abbreviation { get; set; }
        public string Name { get; set; }
        public override string ToString()
        {
            return string.Format("{0} - {1}", Name, Abbreviation);
        }
    }

我得到了要在按钮单击事件上加载的值,但您可以放置

GetStates();
_allStates.ForEach(i => comboBox1.Items.Add(i.ToString()));

随心所欲