将特定元素从 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.FieldSystem.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 和 .NET:如何用从原始 xml 数据加载的许多其他节点替换特定节点