0

私の Web ページは、挿入/更新/削除機能を備えた 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();

        }
      }

ここで私が間違っていることについて、何らかの方向性を教えてください。

4

1 に答える 1

0

これをテストしていませんが、ルートの下に 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();
于 2013-08-08T15:01:56.983 に答える