这是我上一篇文章的延续,我在提交表单中使用了 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>
这是我背后的代码,这是我试图将数据从 Grid 重新写入 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 文件;拜托,我能得到一些关于我在这里做错了什么的方向吗?我填写我很接近。再次感谢。