0

我有一个通过我的 Windows 表单创建的 XML 文件,用于保存两个文本字段和 2 个日期时间选择器。

我想知道如何将其“加载”(最好是通过询问用户文件在哪里)回到我的表单中,以便可以再次对其进行编辑和保存。

public class Values 
{
    public string task1_name { get; set;}
    public string task1_desc { get; set;}
    public DateTime task1_date { get; set;}
    public DateTime task1_time { get; set;}
}

在我的表单上保存按钮

void SavebuttonClick(object sender, EventArgs e)
{
    DialogResult dialogResult = MessageBox.Show("Are you sure you want to save?",
        "Save", MessageBoxButtons.YesNo);

    if (dialogResult == DialogResult.Yes)
    {
        Values v = new Values();
        v.task1_name = this.task1_name.Text;
        v.task1_desc = this.task1_desc.Text;
        v.task1_date = this.task1_date.Value;
        v.task1_time = this.task1_time.Value;
        SaveValues(v);  
    }
}

第三方

public void SaveValues(Values v)
{
    XmlSerializer serializer = new XmlSerializer(typeof(Values));
    using (TextWriter textWriter = new StreamWriter(@"E:\TheFile.xml"))
    {
        serializer.Serialize(textWriter, v);
    }
}
4

3 回答 3

0

您可以将 xml 反序列化为一个对象并使用该对象重新加载字段。

为此,首先使用 xsd.exe 为该 xml 创建 xsd。然后您可以使用相同的 exe 创建类文件并使用 XmlSerializer 将 xml 反序列化为该对象。

于 2012-04-29T18:36:07.633 回答
0

你可以这样做:

public void SomeMethod()
{
    Values v = LoadValues();
    this.task1_name.Text = v.task1_name;
    this.task1_desc.Text = v.task1_desc;
    this.task1_date.Value = v.task1_date;
    this.task1_time.Value = v.task1_time;
}

public Values LoadValues()
{
    XmlSerializer serializer = new XmlSerializer(typeof(Values));
    using (TextReader textReader = new StreamReader(@"E:\TheFile.xml"))
    {
        return (Values)serializer.Deserialize(textReader);
    }
}

我建议将序列化程序放在一个变量中,这样就不会每次都创建它(构造一个新的 XmlSerializer 很昂贵)

希望能帮助到你

于 2012-05-01T04:14:07.293 回答
0

您可以解析 xml 并使用解析的数据更新表单。Visual Studio 中有一个文件选择器对话框供用户选择文件。

XmlTextReader reader = new XmlTextReader ("books.xml");

while (reader.Read()) 
{
    // code
}
于 2012-04-29T17:49:56.677 回答