C# 文本框中选定的组合框项,picturebox XML(XDocument)
如何将组合框中所选项目的所有值显示在文本框picturebox。。。我的XML文件如下所示:C# 文本框中选定的组合框项,picturebox XML(XDocument),c#,xml,linq,C#,Xml,Linq,如何将组合框中所选项目的所有值显示在文本框picturebox。。。我的XML文件如下所示: <?xml version="1.0" encoding="utf-8" standalone="yes"?> <Animals> <Anim id="26"> <Name>Master Yi</Name> <Image>D:\Hobbies\images\MasterYi.png</Image>
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Animals>
<Anim id="26">
<Name>Master Yi</Name>
<Image>D:\Hobbies\images\MasterYi.png</Image>
<Description>Description Here</Description>
<item1>ImageLocation</item1>
</Anim>
</Animals>
我无法将输出代码与所选项目关联。我知道我需要在Parse命令中输入id。但这是如何实现的,我不明白。我需要它在我的主窗体(仅视图)和编辑窗体(用于编辑所选元素和保存)上
xmlDocument与我希望在XDocument中使用的代码相同
labelName.Text = xmlDoc.DocumentElement.ChildNodes[comboBox1.SelectedIndex].ChildNodes[0].InnerText;
pictureBoxImg.ImageLocation = xmlDoc.DocumentElement.ChildNodes[comboBox1.SelectedIndex].ChildNodes[1].InnerText;
textBoxDescription.Text = xmlDoc.DocumentElement.ChildNodes[comboBox1.SelectedIndex].ChildNodes[2].InnerText;
pictureBoxItem1.ImageLocation = xmlDoc.DocumentElement.ChildNodes[comboBox1.SelectedIndex].ChildNodes[3].InnerText;
希望这有帮助
您需要添加using System.Xml.Linq;名称空间
public partial class Form1 : Form
{
private XDocument _xmlDoc;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
_xmlDoc = XDocument.Load(Path.Combine(Environment.CurrentDirectory, "animals.xml"));
FillComboBox();
comboBox1.SelectedIndexChanged += ComboBox1OnSelectedIndexChanged;
}
private void ComboBox1OnSelectedIndexChanged(object sender, EventArgs eventArgs)
{
var cmb = (ComboBox)sender;
var selectedIndex = cmb.SelectedIndex;
var selectedValue = cmb.SelectedValue;
if (_xmlDoc.Root == null) return;
var animal = (from el in _xmlDoc.Root.Elements("Anim")
where (string)el.Attribute("id") == selectedValue.ToString()
select el);
var imagePath = animal.Select(x => x.Element("Image").Value).FirstOrDefault();
pictureBox1.ImageLocation = @imagePath;
txtName.Text = cmb.GetItemText(this.comboBox1.SelectedItem);
var description = animal.Select(x => x.Element("Description").Value).FirstOrDefault();
txtDescription.Text = description;
var itemOne = animal.Select(x => x.Element("item1").Value).FirstOrDefault();
txtItem.Text = itemOne;
}
void FillComboBox()
{
comboBox1.Items.Clear();
comboBox1.DataSource = _xmlDoc.Root.Elements()
.Select(e => new { Id = e.Attribute("id").Value, Name = e.Element("Name").Value })
.ToList();
comboBox1.ValueMember = "Id";
comboBox1.DisplayMember = "Name";
}
}
你的问题不清楚。你能解释一下你想要完成的行为吗?好的,我会尽量简单。我用ID属性填充组合框,并输出XML文件中每个元素的名称(有几个)。如果我在组合框中选择一个元素,固有字段(名称、图像、描述)将显示在相应的文本字段中。你可以说这是一个在线商店。表单上有相同的字段,这些字段按照XML文件填写。代码填充组合框在这里。我可以用xmlDocument来显示我的决心,如果你愿意的话。例如,我在xmlDocument中添加了我在XDocumentSaga中想要的相同代码是的,太棒了!只是我不能理解。。。在我将“加载”添加到FillComboBox之前,这仍然不起作用。这对您来说是正常的工作,或者我在某个地方犯了错误?加载的XML文档应该可以访问以进行进一步的处理/筛选。您使用的变量var doc仅是FillComboBox方法的本地变量,不能在该方法之外使用。像我一样在外部声明和加载。如果您看到我没有在FillComboBox方法中加载XML。我刚刚访问了它,因为我已经在表单加载中加载了xml。哦,对不起。这是我的错误,我只是没有从InitializeComponent部分删除FillComboBox方法。我还有一个问题。添加后如何刷新项目列表?我有Add form和这个Add new item在XML中。在关闭Add之后,如何在主窗体中刷新XML?
public partial class Form1 : Form
{
private XDocument _xmlDoc;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
_xmlDoc = XDocument.Load(Path.Combine(Environment.CurrentDirectory, "animals.xml"));
FillComboBox();
comboBox1.SelectedIndexChanged += ComboBox1OnSelectedIndexChanged;
}
private void ComboBox1OnSelectedIndexChanged(object sender, EventArgs eventArgs)
{
var cmb = (ComboBox)sender;
var selectedIndex = cmb.SelectedIndex;
var selectedValue = cmb.SelectedValue;
if (_xmlDoc.Root == null) return;
var animal = (from el in _xmlDoc.Root.Elements("Anim")
where (string)el.Attribute("id") == selectedValue.ToString()
select el);
var imagePath = animal.Select(x => x.Element("Image").Value).FirstOrDefault();
pictureBox1.ImageLocation = @imagePath;
txtName.Text = cmb.GetItemText(this.comboBox1.SelectedItem);
var description = animal.Select(x => x.Element("Description").Value).FirstOrDefault();
txtDescription.Text = description;
var itemOne = animal.Select(x => x.Element("item1").Value).FirstOrDefault();
txtItem.Text = itemOne;
}
void FillComboBox()
{
comboBox1.Items.Clear();
comboBox1.DataSource = _xmlDoc.Root.Elements()
.Select(e => new { Id = e.Attribute("id").Value, Name = e.Element("Name").Value })
.ToList();
comboBox1.ValueMember = "Id";
comboBox1.DisplayMember = "Name";
}
}