使用 XML 自动填充到表单中
Posted
技术标签:
【中文标题】使用 XML 自动填充到表单中【英文标题】:Auto populated in form with XML 【发布时间】:2021-10-24 21:28:05 【问题描述】:我有一个简单的表格
5 个复选框 (checkBox1..5) 一个 Savebtn 一个Loadbtnwriter.WriteStartElement("Item");
writer.WriteAttributeString("Item1", checkBox1.Checked ? "Bought1" : "No1");
writer.WriteAttributeString("Item2", checkBox2.Checked ? "Bought2" : "No2");
writer.WriteAttributeString("Item3", checkBox3.Checked ? "Bought3" : "No3");
writer.WriteAttributeString("Item4", checkBox4.Checked ? "Bought4" : "No4");
writer.WriteAttributeString("Item5", checkBox5.Checked ? "Bought5" : "No5");
writer.WriteEndElement();
我将用户选择保存在一个 xml 文件中 (Savebtn)
我现在无法加载此文件。 我希望单击 Loadbtn 并根据表单中填充的标记值自动获取 xml 文件地址。
例如:
<Item Item1="Bought1" Item2="No2" Item3="No3" Item4="No4" Item5="Bought5" />
in form 应该是 chkBox1(选中),chkBox5(选中) 请帮帮我。
【问题讨论】:
您可以使用绑定,docs.microsoft.com/en-us/dotnet/desktop/wpf/data/… 创建一个具有必要属性的类,然后只需将信息从/加载到该类中,绑定将为您完成剩下的工作 是的,但我应该使用 Xml 格式 您的问题与 WPF 有什么关系? CheckBox.Checked 属性确实有 Windows.Forms.CheckBox 控件,而不是 WPF 控件。您的项目中是否同时拥有 Window 和 Form 对象?您是如何尝试读回 xml 文件的? 您可以使用您想要保存/加载的格式,xml 或 json,这与我所说的无关。您只需要为您使用的格式使用序列化/反序列化。如果这是 WinForms,WinForms 还支持绑定 【参考方案1】:我认为您最好的解决方案是为您希望保存的数据创建一个专用类,然后使用 System.Xml.Serialization.XmlSerializer
将其存储在 XML 中。
然后您可以使用System.IO.FileStream
将您的课程提供给Serialize
函数,然后使用Deserialize
将其取回。
这样,当您从文件加载时,您加载的整个对象都已准备就绪。
public class MyData
public bool mycheck;
public MyData() mycheck = false;
string savepath = "C:\\mydata.xml";
System.Xml.Serialization.XmlSerializer dataSerializer;
public void Save()
if(dataSerializer == null)
dataSerializer = new System.Xml.Serialization.XmlSerializer(typeof(MyData));
using (System.IO.FileStream fs = new System.IO.FileStream(savepath, System.IO.FileMode.Create, System.IO.FileAccess.Write))
dataSerializer.Serialize(fs, this);
public MyData Load()
if(dataSerializer == null)
dataSerializer = new System.Xml.Serialization.XmlSerializer(typeof(MyData));
if (System.IO.File.Exists(savepath))
using (System.IO.FileStream fs = new System.IO.FileStream(savepath, System.IO.FileMode.Open))
MyData md = null;
try
md = dataSerializer.Deserialize(fs) as MyData;
catch(Exception ex)
System.Windows.MessageBox.Show(ex.ToString());
return md;
else
return new MyData();
【讨论】:
序列化和反序列化 UIElement?我认为这不是一个好主意...无论如何,CheckBox.Checked 是 WinForms,不知道为什么这个问题被标记为 wpf。 @Steeeve 你是完全正确的。哈哈。再说了,反正我也不是这么干的。我把它编辑成更理智的东西。以上是关于使用 XML 自动填充到表单中的主要内容,如果未能解决你的问题,请参考以下文章