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

时间:2019-12-03 21:59:50

标签: c# winforms 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”文件的格式类似于“州代码;地区代码;地区”。

例如:

01; 01;曼哈顿

01; 02;布鲁克林

...

还请注意,我没有使用任何形式的数据库,因此没有SQL或其他任何东西,只有c#语言。

2 个答案:

答案 0 :(得分:1)

据我了解,只要将状态名称放入组合框,就会丢失状态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);
}

答案 1 :(得分:1)

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

希望这会起作用。