![](/img/trans.png)
[英]SelectedIndexChanged event of ComboBox - populate control values
[英]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.