简体   繁体   English

使用c#“多个”XML文件(新输入不应替换)

[英]“Multiple” XML-File (new input should not replace) using c#

I'm writing a short program which displays me all my To Do's. 我正在写一个简短的程序,向我显示我所有的待办事项。 I got 2 tabs. 我有两个标签。 1 Tab is for create a new To Do and the other tab is for displaying me the details of every To Do I selected. 1选项卡用于创建新待办事项,另一个选项卡用于显示每个待办选项的详细信息。 So I have to save the created To Do's in a xml file. 所以我必须将创建的待办事项保存在xml文件中。 For this I am using DataTable and DataSet and it works fine. 为此,我使用DataTableDataSet ,它工作正常。 Here my code: 这是我的代码:

DataTable datatable = new DataTable();
            datatable.TableName = "SaveInput";

            DataColumn dc1 = new DataColumn("Name");
            DataColumn dc2 = new DataColumn("Priority");
            DataColumn dc3 = new DataColumn("StartDate");
            DataColumn dc4 = new DataColumn("EndDateSoll");
            DataColumn dc5 = new DataColumn("EndDateIst");
            DataColumn dc6 = new DataColumn("Comment");

            datatable.Columns.Add(dc1);
            datatable.Columns.Add(dc2);
            datatable.Columns.Add(dc3);
            datatable.Columns.Add(dc4);
            datatable.Columns.Add(dc5);
            datatable.Columns.Add(dc6);

            datatable.Rows.Add(txt_Name.Text, combox_Priority.Text, txt_Beginn.Text, txt_EndSoll.Text, txt_EndIst.Text, txt_Bemerkungen.Text);

            DataSet dataset = new DataSet();

            dataset.Tables.Add(datatable);
            dataset.DataSetName = "MyProgram";

            dataset.WriteXml(@"C:\Users\rs\Desktop\Test\save.xml");

But my problem now is: If I create a new "To Do" in tab1, it replace the new "To Do" in the .xml file. 但我现在的问题是:如果我在tab1中创建一个新的“待办事项”,它将替换.xml文件中的新“待办事项”。 So if I have a look at the .xml file, there is still 1 "To Do". 因此,如果我查看.xml文件,仍然有1个“待办事项”。 I just want to write more tables in the .xml file. 我只想在.xml文件中写更多表。 So my .xml file looks like this: 所以我的.xml文件如下所示:

<MyProgram>
  <SaveInput>
    <Name>todo1</Name>
    <Priority>high</Priority>
    <StartDate>today</StartDate>
    <EndDateSoll>later</EndDateSoll>
    <EndDateIst>not finished</EndDateIst>
    <Comment>blabla</Comment>
  </SaveInput>
</MyProgram>

But it should look like this for example: 但它应该看起来像这样:

<MyProgram>
  <SaveInput>
    <Name>todo1</Name>
    <Priority>high</Priority>
    <StartDate>today</StartDate>
    <EndDateSoll>later</EndDateSoll>
    <EndDateIst>not finished</EndDateIst>
    <Comment>blabla</Comment>

    <Name>todo2</Name>
    <Priority>high</Priority>
    <StartDate>yesterday</StartDate>
    <EndDateSoll>tomorrow</EndDateSoll>
    <EndDateIst>not finished</EndDateIst>
    <Comment>testtest</Comment>
  </SaveInput>
</MyProgram>

I hope someone can help me or give me a hint so I can create more than 1 To-Do. 我希望有人可以帮助我或给我一个提示,这样我就可以创造超过1个待办事项。

Cheers 干杯

EDIT: It's a WinForm Application 编辑:这是一个WinForm应用程序

This code should work for you. 此代码应该适合您。

Check it out 看看这个

DataSet ds = new DataSet();
            if (File.Exists(@"C:\Users\rs\Desktop\Test\save.xml"))
            {
                ds.ReadXml(@"C:\Users\rs\Desktop\Test\save.xml");

                ds.Tables[0].Rows.Add(txt_Name.Text, combox_Priority.Text, txt_Beginn.Text, txt_EndSoll.Text, txt_EndIst.Text, txt_Bemerkungen.Text);
                ds.WriteXml(@"C:\Users\rs\Desktop\Test\save.xml");
            }
            else
            {
                DataTable datatable = new DataTable();
                datatable.TableName = "SaveInput";

                DataColumn dc1 = new DataColumn("Name");
                DataColumn dc2 = new DataColumn("Priority");
                DataColumn dc3 = new DataColumn("StartDate");
                DataColumn dc4 = new DataColumn("EndDateSoll");
                DataColumn dc5 = new DataColumn("EndDateIst");
                DataColumn dc6 = new DataColumn("Comment");

                datatable.Columns.Add(dc1);
                datatable.Columns.Add(dc2);
                datatable.Columns.Add(dc3);
                datatable.Columns.Add(dc4);
                datatable.Columns.Add(dc5);
                datatable.Columns.Add(dc6);

                datatable.Rows.Add(txt_Name.Text, combox_Priority.Text, txt_Beginn.Text, txt_EndSoll.Text, txt_EndIst.Text, txt_Bemerkungen.Text);

                DataSet dataset = new DataSet();

                dataset.Tables.Add(datatable);
                dataset.DataSetName = "MyProgram";

                dataset.WriteXml(@"C:\Users\rs\Desktop\Test\save.xml");
            }

Correct me if I'm wrong, but from your code it seems to me that you always create a new dataset, that contains only the new values. 如果我错了,请纠正我,但是从你的代码中我觉得你总是创建一个只包含新值的新数据集。 Do you read the already existing Todos first? 你先读过现有的Todos吗? If not, you simply always overwrite your xml file and the previous entries. 如果没有,您只需覆盖您的xml文件和之前的条目。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM