将特定元素从 XML 加载到 textbox/combobox/NumericUpDown

Posted

技术标签:

【中文标题】将特定元素从 XML 加载到 textbox/combobox/NumericUpDown【英文标题】:Load specific elements from XML into textbox/combobox/NumericUpDown 【发布时间】:2020-08-27 02:57:27 【问题描述】:

我目前有一个组合框 cbxID,它显示所有 StudentID,并希望在按下按钮加载的同时将不同的元素发送到不同的文本框/组合框/NumericUpDown。

加载按钮应采用当前选定的学生 ID,然后将信息发送到右侧框中。

  <Student>
    <StudentID>207</StudentID> //supposed to go into txtStudentID
    <FirstName>Bob</FirstName> // -->txtFirstName
    <LastName>Smith</LastName> // -->txtLastName
    <SchoolClass>10</SchoolClass> // -->txtSchoolClass
    <Age>17</Age> //-->nudAge (numericupdown)
    <Height>186</Height //-->nudHeight
    <Gender>male</Gender> //-->combobox
  </Student>

我正在使用此代码将 ID 显示到组合框中

       private void Form1_Load(object sender, EventArgs e)
        
            DataSet dataSet = new DataSet();
            dataSet.ReadXml(FilePath);
            this.cbxStudentIDs.DataSource = dataSet.Tables[0];
            this.cbxStudentIDs.DisplayMember = "ID";
        

【问题讨论】:

你可以得到数据行:DataRow row = dataset.Tables[0].AsEnumerable().Where(x => x.Field("StudentID") == cmxStudentIDs.Text) .FirstOrDefault();当xml具有“StudentID”时,不确定为什么您的代码使用“ID”。 我收到此错误System.IndexOutOfRangeException: 你从哪里得到异常?如果组合框没有项目,我的代码将不起作用,如果数据集中没有表,我的代码也不会起作用。看起来 Jack 修复了我之前发现的问题,并将“ID”更改为“StudentID”,就像我上面所说的那样。 【参考方案1】:

根据你的描述,你想加载按钮来接收当前的

选择的学生证,当你按下按钮加载时,将不同的元素发送到不同的消息框。

你可以试试下面的代码来解决这个问题。

public partial class Form1 : Form
    
        string FilePath = "D:\\student.xml";        

        public Form1()
               
            InitializeComponent();
        

        private void button1_Click(object sender, EventArgs e)
        
            DataSet dataSet = new DataSet();
            dataSet.ReadXml(FilePath);
            DataRow row = dataSet.Tables[0].AsEnumerable().Where(x => x.Field<string>("StudentID") == cbxStudentIDs.Text).FirstOrDefault();
            txtStudentID.Text = row["StudentID"].ToString();
            txtFirstName.Text = row["FirstName"].ToString();
            txtLastName.Text = row["LastName"].ToString();
            txtSchoolClass.Text = row["SchoolClass"].ToString();
            nudAge.Value = Convert.ToDecimal(row["Age"]);
            nudHeight.Value = Convert.ToDecimal(row["Height"]);
            comboBox1.Text= row["Gender"].ToString();

        

        private void Form1_Load(object sender, EventArgs e)
        
            DataSet dataSet = new DataSet();
            dataSet.ReadXml(FilePath);
            cbxStudentIDs.DataSource = dataSet.Tables[0];
            cbxStudentIDs.DisplayMember = "StudentID";

        
    

我使用了以下 xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfDaten xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Student>
    <StudentID>207</StudentID> 
    <FirstName>Bob</FirstName> 
    <LastName>Smith</LastName> 
    <SchoolClass>10</SchoolClass> 
    <Age>17</Age> 
    <Height>186</Height>
    <Gender>male</Gender> 
  </Student>
 <Student>
    <StudentID>208</StudentID> 
    <FirstName>fei</FirstName> 
    <LastName>meng</LastName> 
    <SchoolClass>12</SchoolClass> 
    <Age>19</Age> 
    <Height>178</Height>
    <Gender>male</Gender> 
  </Student>
 <Student>
    <StudentID>209</StudentID> 
    <FirstName>qiu</FirstName> 
    <LastName>Song</LastName> 
    <SchoolClass>12</SchoolClass> 
    <Age>18</Age> 
    <Height>165</Height>
    <Gender>female</Gender> 
  </Student>
<Student>
    <StudentID>210</StudentID> 
    <FirstName>yiyi</FirstName> 
    <LastName>Yao</LastName> 
    <SchoolClass>11</SchoolClass> 
    <Age>18</Age> 
    <Height>168</Height>
    <Gender>female</Gender> 
  </Student>
</ArrayOfDaten>

这是我的测试结果:

【讨论】:

你是一个绝对的传奇!非常感谢:)

以上是关于将特定元素从 XML 加载到 textbox/combobox/NumericUpDown的主要内容,如果未能解决你的问题,请参考以下文章

如何从元素中具有相同名称的 xml 文件中获取特定值?

XML 和 .NET:如何用从原始 xml 数据加载的许多其他节点替换特定节点

Linq to XML 将元素添加到特定的子树

从 xml 读取特定元素

加载数据源后,如何将 HTML 元素添加到 kendo ui 的列表视图中的特定位置?

LINQ to XML - 从文件加载 XML 片段