在另一个组合框的选定索引更改事件上填充一个组合框
本文关键字:组合 填充 一个 事件 另一个 索引 | 更新日期: 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;
}
}
希望这有帮助。