0

2つのテキストフィールドと2つの日時ピッカーを保存するためにWindowsフォームを介して作成されたXMLファイルがあります。

これをフォームに「ロード」して(できればファイルの場所をユーザーに尋ねて)、編集して再度保存できるようにする方法を考えています。

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

あなたはこれを行うことができます:

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);
    }
}

毎回作成されないように、シリアライザーを1つの変数に含めることをお勧めします(新しい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 に答える
0

xmlをオブジェクトに逆シリアル化し、そのオブジェクトを使用してフィールドを再ロードできます。

そのためには、最初にxsd.exeを使用してそのxmlのxsdを作成します。次に、同じexeを使用してクラスファイルを作成し、XmlSerializerを使用してxmlをそのオブジェクトに逆シリアル化します。

于 2012-04-29T18:36:07.633 に答える