Xml子子节点在通过Gridview控件插入期间出现在子节点之外

本文关键字:子节点 控件 Gridview Xml 插入 | 更新日期: 2023-09-27 18:26:50

我的网页由一个具有插入/更新/删除功能的GridView控件组成;它的数据存储在一个XML文件中。面临的问题是,当我插入新行时,当复制到xml文件中时,子子生成节点(新插入的日期)出现在其子节点(**pos节点)之外:例如:

<root>
  <pos>
    <partNumbers>
      <partid>0</partid>
      <partnumber>796547</partnumber>
    </partNumbers>
    <partNumbers>
      <partid>3</partid>
      <partnumber>567890</partnumber>
    </partNumbers>
  </pos>
  <partNumbers>
    <partid>10</partid>
    <partnumber>129123</partnumber>
  </partNumbers>
</root>

我的目标是让新插入的行保持在节点中,如下所示:

<root>
      <pos>
        <partNumbers>
          <partid>0</partid>
          <partnumber>796547</partnumber>
        </partNumbers>
        <partNumbers>
          <partid>3</partid>
          <partnumber>567890</partnumber>
        </partNumbers>
         <partNumbers>
        <partid>10</partid>
        <partnumber>129123</partnumber>
      </partNumbers>
      </pos>
     </root>

以下是我的插入代码:

protected void gvPartNumber_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "insertXMLData")
        {
            string partid = ((TextBox)gvPartNumber.FooterRow.FindControl("txtPartIDInsert")).Text;
            string partnumber = ((TextBox)gvPartNumber.FooterRow.FindControl("txtPartNumberInsert")).Text;
            BindGridView();
            DataTable dtXMLInsert = (DataTable)gvPartNumber.DataSource;
            DataSet dsgvPartNumber = new DataSet();
            dsgvPartNumber.ReadXml(Server.MapPath("~/xml/storeUserInfo.xml"));
            DataRow drInsert = dsgvPartNumber.Tables["partNumbers"].NewRow();
            drInsert["partid"] = partid;
            drInsert["partnumber"] = partnumber;
            dsgvPartNumber.Tables["partNumbers"].Rows.Add(drInsert);
            dsgvPartNumber.WriteXml(Server.MapPath("~/xml/storeUserInfo.xml"));
            BindGridView();
        }
      }

我能告诉你我在这里做错了什么吗?

Xml子子节点在通过Gridview控件插入期间出现在子节点之外

还没有测试过这一点,但基于它在根目录下添加XML的事实,我猜需要更改以下行:

dsgvPartNumber.Tables["partNumbers"].Rows.Add(drInsert);

dsgvPartNumber.Tables["pos"].Rows.Add(drInsert);

编辑:

我们开始了:

添加:

DataRow drParent = dsgvPartNumber.Tables["pos"].Rows[0];
drInsert.SetParentRow(drParent);

最终代码应为:

DataSet dsgvPartNumber = new DataSet();
dsgvPartNumber.ReadXml(Server.MapPath("~/xml/storeUserInfo.xml"));
DataRow drInsert = dsgvPartNumber.Tables["partNumbers"].NewRow();
drInsert["partid"] = partid;
drInsert["partnumber"] = partnumber;
DataRow drParent = dsgvPartNumber.Tables["pos"].Rows[0];
drInsert.SetParentRow(drParent);
dsgvPartNumber.Tables["partNumbers"].Rows.Add(drInsert);
dsgvPartNumber.WriteXml(Server.MapPath("~/xml/storeUserInfo.xml"));
BindGridView();