使用 XML 自动填充到表单中

Posted

技术标签:

【中文标题】使用 XML 自动填充到表单中【英文标题】:Auto populated in form with XML 【发布时间】:2021-10-24 21:28:05 【问题描述】:

我有一个简单的表格

5 个复选框 (checkBox1..5) 一个 Savebtn 一个Loadbtn
writer.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 自动填充到表单中的主要内容,如果未能解决你的问题,请参考以下文章

用户记住密码,取消浏览器表单记忆自动填充

将日期自动填充到表单字段中

使用 AJAX 调用时如何存储到浏览器自动完成/自动填充

如何使用 Excel 电子表格中的数据在 Access 中自动填充表单

使用 joomla 用户数据自动填充独立表单

html 防止粘贴到自动填充表单字段中