Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何选择和更新xml文件中的信息_C#_Xml - Fatal编程技术网

C# 如何选择和更新xml文件中的信息

C# 如何选择和更新xml文件中的信息,c#,xml,C#,Xml,因此,我知道如何将数据从选定的gridview加载到文本框中,但如何使其更新选定的位置信息,而不是在文件中创建新位置,如果我想,还可以从文件中删除选定的位置 这就是我当前加载到datagrid的方式 ds.ReadXml("Database.xml"); string filter = ""; filter = "userdata" + " LIKE '*" + "u" + "*'"; DataView dv = new DataView(ds.Tables[0]); dv.RowFilter

因此,我知道如何将数据从选定的gridview加载到文本框中,但如何使其更新选定的位置信息,而不是在文件中创建新位置,如果我想,还可以从文件中删除选定的位置

这就是我当前加载到datagrid的方式

ds.ReadXml("Database.xml");

string filter = "";
filter = "userdata" + " LIKE '*" + "u" + "*'";
DataView dv = new DataView(ds.Tables[0]);
dv.RowFilter = filter;
dataGridView1.DataSource = dv;
dataGridView1.Columns[4].Visible = false;
以及如何加载到文本框,具体取决于单击的是哪个

if (e.RowIndex >= 0)
{

DataGridViewRow row = this.dataGridView1.Rows[e.RowIndex];
Nametb.Text = row.Cells["name"].Value.ToString();
Locationtb.Text = row.Cells["Location"].Value.ToString();
Infotb.Text = row.Cells["Info"].Value.ToString();
dayvisitcb.Text = row.Cells["Dayvisited"].Value.ToString();

}
这是我的xml

<root>
  <place>
    <Name>home</Name>
    <Location>x-292 z 277</Location>
    <Info>home</Info>
    <Dayvisited>10</Dayvisited>
  </place>
  <place>
    <Name>town</Name>
    <Location>x 990 z-2485</Location>
    <Info>gas station</Info>
    <Dayvisited>12</Dayvisited>
  </place>
  <place>
    <Name>crossing</Name>
    <Location>x 90 z-2998</Location>
    <Info>working stiff</Info>
    <Dayvisited>11</Dayvisited>
  </place>
</root>
此文件将包含随机名称,并将包含数百个位置。但到目前为止,我可以将位置加载到网格中,选择一个位置,并将详细信息放入文本框进行编辑,但我只能将其添加到列表中,而不仅仅是更新或删除所选位置,您最好利用它。这将完成所有繁重的工作,而不需要自己编写任何代码。您只需在数据集中读写XML文件

首先,在项目中添加一个新项,即“在数据类别中找到的数据集”,将其命名为“数据库”。通过右键单击设计图面添加DataTable,选择Add>DataTable。命名您的数据表位置。接下来在表中添加4列名称、位置、信息和Dayvisited。 在数据集的属性中,清空字段名称空间。 完成后,这将是您的结果:

构建项目

在设计模式下打开Winform。 从工具箱中,从类别数据中拖动窗体上的组件BindingSource、BindingNavigator、DataGridView和DataSet

对于数据源,选择在上一步中创建的类型化数据集数据库

单击bindingSource并将属性DataSource设置为database。将DataMember设置为place

单击bindingnavigator。将属性Bindingsource设置为BindingSource1,假设未启用其默认名称

单击datagridview。将属性DataSource设置为bindingSource1

为每个字段添加文本框。对于属性中的每个文本框,打开数据绑定类别,对于文本属性,为其他属性选择bindingSource1->Name repeat

在表单中添加一个按钮以加载数据集。这是单击事件中的代码:

database2.ReadXml("Database.xml");
this.button2.Enabled = true;
button1.Enabled = false;
database2.WriteXml("Database.xml");
在表单中添加按钮以保存数据集。这是单击事件中的代码:

database2.ReadXml("Database.xml");
this.button2.Enabled = true;
button1.Enabled = false;
database2.WriteXml("Database.xml");
完成后,您的项目应该是这样的:

运行它并单击“加载”按钮后,选择“记录”,使用导航器添加新记录,然后单击“保存”,这将是您的结果:


这是可行的,但不是我想要使用的方法。有没有一种方法可以让我更新一个按钮,因为bindingnavigator+只是bindingSource1.AddNew;我可以让它绑定到字符串而不是文本框吗?因为那样会更灵活。因此,当我添加新内容时,它会根据我赋予值的字符串进行更新。如果这样做有意义,您可以隐藏绑定导航器和文本框,然后创建自己的按钮调用bindingSource1.AddNew,然后用您想到的字符串填充TextBox.Text。不能直接绑定到字符串值,因为字符串是不可变的,所以要绑定到类实例的属性。在我的示例中,这是datagrid和文本框。除此之外,你只能靠自己了。