在另一个组合框的选定索引更改事件上填充一个组合框

本文关键字:组合 填充 一个 事件 另一个 索引 | 更新日期: 2023-09-27 18:31:30

我一直在尝试在两个单独的组合框中填充xml文件中的一些值。第二个组合框的内容将取决于第一个组合框的选择。第一个组合框将包含"ClusterName",第二个组合框将包含相应的"MachineID"。

我已填充群集名称组合框,但无法填充相应的计算机 ID。

The C# code I used to populate the the first combobox:
public void PopulateClusterNameDropDown()
{
    XDocument doc = XDocument.Load("the path of the file");
    List<string> clusterNameList = doc.Root
        .Elements("Machines")
        .Elements("Cluster")
        .Elements("ClusterName")
        .Select(x => (string)x)
        .ToList();
    BindingSource bs = new BindingSource();
    bs.DataSource = clusterNameList;
    cbSelectCluster.DataSource = bs;
}

编辑:

我试图填充机器id组合框的代码

private void cbSelectCluster_SelectedIndexChanged(object sender, EventArgs e)
{
    XElement root = XElement.Load("file path");
    if (!cbSelectCluster.Text.Trim().Equals("")) {
        cbSelectMachineID.Enabled = true;
        cbSelectMachineID.Items.Clear();
        var selected = from cli in root.Elements("Machines").Elements("Cluster").Elements("MachineID")
        where cli.Element("ClusterName").Value.Equals(cbSelectCluster.Text)
        select cli;
        BindingSource bs = new BindingSource();
        bs.DataSource = selected;
        cbSelectMachineID.DataSource = bs;
    }
}

该 Xml 如下所示

<Config>
    <Machines>
        <Cluster>
            <ClusterName>ABC</ClusterName>
            <MachineID>Machine123</MachineID>
            <MachineID>Machine456</MachineID>
            <MachineID>Machine789</MachineID>
        </Cluster>
        <Cluster>
            <ClusterName>XYZ</ClusterName>
            <MachineID>Machine111</MachineID>
            <MachineID>Machine222</MachineID>
            <MachineID>Machine333</MachineID>
        </Cluster>
    </Machines>
</Config>

在另一个组合框的选定索引更改事件上填充一个组合框

您遇到此问题是因为您正在 MachineID 元素下查找群集名称元素。您只需要修复 LINQ。

请在下面找到固定代码。

另外,值得注意的是,我已经删除了cbSelectMachineID.Items.Clear()行,因为如果您设置数据源,则无法清除组合框。

private void cbSelectCluster_SelectedIndexChanged(object sender, EventArgs e)
{
    XElement root = XElement.Load("filename.xml");
    if (!cbSelectCluster.Text.Trim().Equals(""))
    {
        cbSelectMachineID.Enabled = true;
        var machineIds = root
            .Elements("Machines")
            .Elements("Cluster")
            .Where(clusterElement => (string)clusterElement.Element("ClusterName") == cbSelectCluster.Text)
            .Elements("MachineID")
            .Select(x => (string)x)
            .ToList();
        BindingSource bs = new BindingSource();
        bs.DataSource = machineIds;
        cbSelectMachineID.DataSource = bs;
    }
}

希望这有帮助。