これは前回の投稿からの続きです。送信フォームでテキスト ボックス コントロールと共に Gridview を使用しています。送信ボタンをクリックすると、情報が xml ファイルにレンダリングされます。フォームが使用されるたびに、xml ファイルに新しく入力されたデータが入力されるようにすることで、以前の送信から入力されたデータを上書きします。ユーザーは複数の製品番号を入力できる必要があります。これが、送信フォームで編集可能な Gridview を使用する理由です。私の問題は、送信ボタンをクリックすると、テキスト ボックスから入力されたデータが xml ファイルにコピーされますが、Gridview からのデータは上書きされることです。ただし、Gridview を介して XML ファイルのデータを編集/挿入/削除することはできます。gridview データを xml ファイルに保存できません:
以下は私のデザインです:
<div>
<!--Grdiview -->
<div>
<asp:GridView ID="gvProductNumber" runat="server" AutoGenerateColumns="False"
onrowdeleting="gvProductNumber_RowDeleting" onrowediting="gvProductNumber_RowEditing"
onrowupdating="gvProductNumber_RowUpdating" onrowcommand="gvProductNumber_RowCommand"
ShowFooter="True" Width="482px"
onrowcancelingedit="gvProductNumber_RowCancelingEdit">
<Columns>
<asp:TemplateField HeaderText="Product ID">
<EditItemTemplate>
<asp:TextBox ID="txtProductID" runat="server" Text='<%# Bind("productID") %>'></asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtProductIDInsert" runat="server"></asp:TextBox>
</FooterTemplate>
<ItemTemplate>
<asp:Label ID="lblProductID" runat="server" Text='<%# Bind("ProductID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Product Number">
<EditItemTemplate>
<asp:TextBox ID="txtProductNumber" runat="server" Text='<%# Bind("productNumber") %>'></asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtProductNumberInsert" runat="server"></asp:TextBox>
</FooterTemplate>
<ItemTemplate>
<asp:Label ID="lblProductNumber" runat="server" Text='<%# Bind("ProductNumber") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="False">
<EditItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True"
CommandName="Update" Text="Update"></asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False"
CommandName="Cancel" Text="Cancel"></asp:LinkButton>
</EditItemTemplate>
<FooterTemplate>
<asp:LinkButton ID="btnInsert" runat="server" CommandName="insertXMLData">Insert</asp:LinkButton>
</FooterTemplate>
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False"
CommandName="Edit" Text="Edit"></asp:LinkButton>
</ItemTemplate>
<ItemStyle Width="120px" />
</asp:TemplateField>
<asp:CommandField ShowDeleteButton="True" />
</Columns>
</asp:GridView>
</div>
<!--end gridview -->
<br /><br />
<div>
<div><p>Last Name: <asp:TextBox id="txtLastName" runat="server" /></p></div>
<div><p>First Name: <asp:TextBox id="txtFirstName" runat="server" /></p></div>
<div><p>Street Address: <asp:TextBox id="txtAddress" runat="server" /></p></div>
<div><p>City: <asp:TextBox id="txtCity" runat="server" /></p></div>
<div><p>State: <asp:TextBox id="txtState" runat="server" /></p></div>
<div><p>Zip Code: <asp:TextBox id="txtZipCode" runat="server" /></p></div>
<div><asp:Button id="btnWriteXml" OnClick="Write_XML" Text="Write XML File" runat="server" /></div>
</div>
</div>
これは私のコード ビハインドです。これは、グリッドから xml ファイルにデータを書き直し、同時にテキスト ボックス コントロールを介して入力されたデータを書き込もうとしている場所です。
'結果をxmlファイルに書き込みます
Public Sub Write_XML(ByVal sender As System.Object, ByVal e As System.EventArgs)
'You have saved xml, now want to add data thorugh text boxes
Dim dsgvPersonalData As New DataSet()
dsgvPersonalData.ReadXml(Server.MapPath("~/xml/PersonDataVI.xml"))
'Add new Product
Dim drNewProduct As DataRow = dsgvPersonalData.Tables("product").NewRow()
Dim productID As String = DirectCast(gvProductNumber.FooterRow.FindControl("txtProductIDInsert"), TextBox).Text
Dim productNumber As String = DirectCast(gvProductNumber.FooterRow.FindControl("txtProductNumberInsert"), TextBox).Text
drNewProduct("productID") = productID
drNewProduct("productNumber") = productNumber
dsgvPersonalData.Tables("product").Rows.Add(drNewProduct)
'Add new Customer
Dim drNewCustomer As DataRow = dsgvPersonalData.Tables("customer").NewRow()
drNewProduct("LastName") = txtLastName.Text
drNewProduct("FirstName") = txtFirstName.Text
drNewProduct("Address") = txtAddress.Text
drNewProduct("City") = txtCity.Text
drNewProduct("State") = txtState.Text
drNewProduct("ZipCode") = txtZipCode.Text
dsgvPersonalData.Tables("customer").Rows.Add(drNewProduct)
'Save the xml
dsgvPersonalData.WriteXml(Server.MapPath("~/xml/PersonDataVI.xml"))
'databinding is easy here
gvProductNumber.DataSource = dsgvPersonalData.Tables("product")
gvProductNumber.DataBind()
End Sub
生成しようとしているxml:
<PersonalData>
<products>
<product>
<productID>1</productID>
<productNumber>123456</productNumber>
</product>
<product>
<productID>2</productID>
<productNumber>458922</productNumber>
</product>
<product>
<productID>4</productID>
<productNumber>224578</productNumber>
</product>
<product>
<productID>5</productID>
<productNumber>789012</productNumber>
</product>
</products>
<customers>
<customer>
<LastName>Doe</LastName>
<FirstName>Jane</FirstName>
<Address>1456 somewhere Dr.</Address>
<City>Frisco</City>
<State>California</State>
<ZipCode>59045</ZipCode>
</customer>
</customers>
</PersonalData>
前述のように、gridiview からの xml は、ボタンのクリック時に xml ファイルへの再書き込みに失敗します。ここで私が間違っていることについての方向性を教えてください。私は私が近いことを記入します。再度、感謝します。