根据第一个组合框的选项填充第二个组合框

Second combobox is populated depending on option from first combobox

所以我有两个组合框。第一个组合框包含所有州,第二个组合框显示所选州的地区。请注意,选项来自 .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" 文件的格式类似于 "state code; district code; district"。

例如:

01;01;曼哈顿

01;02;布鲁克林

...

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

据我了解,当您将状态名称放入组合框中时,您将丢失状态 ID。

将您的第一个组合框设置为显示 'Name' 并将 '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);
}

您可以使用加载按钮从 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]);
    }

希望这会奏效。