【问题标题】:Xml Subchild node appears outside of child node during an insert via a Gridview Control在通过 Gridview 控件插入期间,Xml 子子节点出现在子节点之外
【发布时间】:2013-08-08 14:30:25
【问题描述】:

我的网页包含一个具有插入/更新/删除功能的 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();

        }
      }

我能否就我在这里做错了什么得到一些指导?

【问题讨论】:

    标签: c# asp.net xml gridview


    【解决方案1】:

    尚未对此进行测试,但基于它在根目录下添加 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();
    

    【讨论】:

    • ...这也是我的第一个假设,但是会生成以下错误:列 'partid' 不属于表 pos。我将继续使用代码来获得解决方案,但如果有其他想法,请告诉我。谢谢。
    • 谢谢 Damon,您的解决方案解决了这个问题。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多