【问题标题】:Displaying XML data selected from Combobox in Textbox C#在文本框 C# 中显示从组合框中选择的 XML 数据
【发布时间】:2017-03-13 11:01:09
【问题描述】:

您好,我正在学习 C#,我正在尝试在组合框中选择后,在同一表单的文本框中显示 User1.xml 中的 xml 信息。

我已设法使用此代码用名称标签填充组合框。 (以便可以选择用户名)

private void Form1_Load(object sender, EventArgs e)
{
   XmlDocument sFor = new XmlDocument();
   sFor.Load(Path.GetFullPath("User1.xml"));
   XmlNodeList SearchList = sFor.SelectNodes("employee/user/name");
   foreach (XmlNode Search in SearchList)
   {
      comboBox1.Items.Add(Search.InnerText);
   }

}

XML 是这样格式化的

<employee>
    <user>
    <name>John Smith</name>
    <department>PAI</department>
    <manager>MD</manager>
    <hours>full-time</hours>
    <leave>940</leave>
    </user>
</employee>

我将如何(使用 linq 或 xmlreader 或其他方式)在 Combobox 中选择后,在 textBox2 中显示信息?

谢谢。

【问题讨论】:

  • 您想从 XML 内部输出值,还是从整个 XML 本身输出?
  • textBox2 定义在哪里?
  • 整个用户的输出信息与从组合框中选择的用户名相关。
  • 不确定您所说的定义是什么意思? textBox2 与其他组合框和文本框的形式相同,并且被初始化。另外澄清一下,我想显示单个用户的详细信息、部门、经理等。xml 文档包含多个用户

标签: c# xml visual-studio


【解决方案1】:

我对寻找“城市”的 DataGridView 做了类似的事情。输入字段是 Textbox1.Text。我希望这不是矫枉过正。感谢 Stack 的海报向我展示了如何做到这一点!我先提取特定数据,然后将其加载到列表中。最后,将 List 设为 DGV 的数据源。这可能适用于组合框......是吗?

<TaxTbl>
  <TaxSite>
    <Location>Axx</Location>
    <Address>xxx</Address>
    <City>aaa</City>
    <State> st</State>
    <Zip>xxx</Zip>
  </TaxSite>
  <TaxSite>
    <Location>Bxxx</Location>
    <Address>xxx</Address>
    <City>xxx</City>
    <State> st</State>
    <Zip>xxx</Zip>
  </TaxSite>
</TaxTbl>






 var xdoc = XDocument.Load("C:\\Users\\Harley\\desktop\\outfile.xml");



var NewDoc = new XDocument(new XElement("TaxTbl",
             from anEntry in xdoc.Element("TaxTbl").Elements("TaxSite")
             where anEntry.Element("City").Value.Contains(textBox1.Text)
             select anEntry));



var MyList =
                    (from bEntry in NewDoc.Descendants("TaxSite")
                     select new
                     {
                         Location = bEntry.Element("Location").Value,
                         Address = bEntry.Element("Address").Value,
                         City = bEntry.Element("City").Value,
                         State = bEntry.Element("State").Value,
                         Zip = bEntry.Element("Zip").Value
                     }).ToList();


 cityDGV.DataSource = MyList.ToList();

【讨论】:

  • 我用一个组合框检查了这个,它确实抓取了数据,带有关联的节点标签。呸。像上一个答案一样,您可以使用节点的内部文本加载变量,然后将其转储到组合框中。
  • 您好,我在同一点上,我已经设法获取代码以将 xml 数据拉入类似结构的数组中,但我不确定如何将其重复到文本框中。
  • 如果您查看第二部分,类似于第一个答案,其中元素值被分配给变量......您可能能够将这些值完全作为字符串并将该字符串添加到你的文本框输出。或者...您可以将其分解为每个变量的标签,即名称标签、地址标签、城市标签等。我希望我的示例易于理解。
  • 我将创建的 ToList 放入一个文本框中。看起来像 ...textBox2.Text = MyList[0].ToString();
【解决方案2】:

如果这对你有帮助

XDocument doc = XDocument.Load(Path.GetFullPath("User1.xml"));

var rows = doc.Descendants("employee").Descendants("user").Select(el => new()
{
  department = el.Element("department").Value,
  manager = el.Element("manager").Value,
  hours = el.Element("hours").Value,
  leave = el.Element("leave").Value,
});

像这样从 DataSet 中或

DataSet ds = new DataSet();
ds.ReadXmlSchema(new StreamReader("User1.xml"));
ds.ReadXml(new StreamReader("User1.xml"));

【讨论】:

  • 我已尝试实施此解决方案,但在第 3 行收到编译器错误 var rows = doc.Descendants("employee").Descendants("user").Select(el => new() -在双括号中它声称“预期类型”。删除括号 () 允许编译,但不能按预期工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-23
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
  • 2015-09-20
  • 1970-01-01
相关资源
最近更新 更多