簡體   English   中英

在另一個組合框的selectedindexchanged事件上填充一個組合框

[英]Populate one combobox on the selectedindexchanged event of another combox

我一直試圖在兩個單獨的組合框中填充來自xml文件的一些值。 第二個組合框的內容將取決於第一個組合框的選擇。 第一個組合框將包含“ ClusterName ”,第二個組合框將包含相應的“ MachineID

我已經填充了clustername組合框,但是無法填充相應的machineid。

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;
}

編輯:

我嘗試填充Machineid Combo框的代碼

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元素下尋找ClusterName元素。 您只需要修復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;
    }
}

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM