【问题标题】:Second combobox is populated depending on option from first combobox根据第一个组合框的选项填充第二个组合框
【发布时间】:2019-12-03 21:59:50
【问题描述】:

所以我有两个组合框。第一个组合框包含所有州,第二个组合框将显示所选州的地区。请注意,选项来自 .txt 文件。

所以在这种情况下,“states.txt”文件的格式类似于“state code;state”。

例如:

01;纽约

02;新泽西

...

状态组合框工作正常,下面是使用的代码:

List<string> States = File.ReadAllLines("states.txt").ToList();

foreach(string Line in States)
{
     string[] state_element = Line.Split(';');
     combo_states.Items.Add(state_element[1]);
}

现在的问题是让第二个组合框显示所选州的地区。

“district.txt”文件的格式类似于“州代码;地区代码;地区”。

例如:

01;01;曼哈顿

01;02;布鲁克林

...

另外请注意,我没有使用任何形式的数据库,所以没有 SQL 或任何东西,只有 c# 语言。

【问题讨论】:

  • 元素[1] 未定义。您可能是指 state_element[1]。我建议进行错误检查以确保 state_element.length > 2
  • 什么是combo_states对象?
  • combo_states 只会出现txt文件中的状态,所以state_element[1]
  • @TyroneAndrews 请看看我编辑的答案

标签: c# winforms combobox


【解决方案1】:

据我了解,当您将其名称放入 Combobox 时,您会丢失该州的 Id。

将您的第一个组合框设置为显示“名称”并将“ID”作为值:

combo_states.ValueMember = "Id";
combo_states.DisplayMember = "Name";

foreach(string Line in States)
{
     string[] state_element = Line.Split(';');
     combo_states.Items.Add(new { Id = state_element [0], Name = state_element[1]});
}

现在在您的组合框中的 SelectedValueChange 事件中,您可以访问状态的 Id,例如:

string id = combo_states.SelectedValue;

并且有这样的地区:

var districts = File.ReadAllLines("district.txt")
.Select(x => 
     { 
         string split = x.Split(';');
         return new {StateId = split[0], DistrictId = split[1], DistrictName = split[1]}
     };

然后:

string id = combo_states.SelectedValue;
district_combo.ValueMember = "DistrictId";
district_combo.DisplayMember = "DistrictName";
foreach(var item in districts.Where(d => d.StateId == id))
{
      district_combo.Items.Add(item);
}

【讨论】:

  • 成功了!感谢您的帮助!
【解决方案2】:

您可以使用加载按钮从 District.txt 文件中加载地区。 例如:

//在load_button点击事件中

    List<string> districts = File.ReadAllLines("district.txt").ToList();
    foreach(string Line in districts)
    {
        string[] district_element = Line.Split(';');
        if(district_element[0] == combo_states.Text)
        combo_districts.Items.Add(district_element[2]);
    }

希望这会奏效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    相关资源
    最近更新 更多