1

データを XML ファイルにレンダリングする送信フォーム (テキスト ボックスとドロップダウン コントロール) で GridView (挿入/編集/削除) を使用しています。GridView を介して XML ファイルを編集/挿入/削除することができ、フォーム コントロール タグは、送信の問題をクリックすると、入力されたデータを XML に正常にコピーします。私の問題は、送信ボタンをクリックすると、Gridview のデータが消去され、フォーム コントロール タグから送信されたデータのみが残ることです。

以下は、フォーム コントロール タグを介して送信されたデータを書き込むために使用しているコード (ボタン イベント ハンドラー) です。

Public Sub Write_XML(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Dim textWriter As New XmlTextWriter(Server.MapPath("xml/PersonDataVI.xml"), Nothing)
        textWriter.Formatting = System.Xml.Formatting.Indented
        'Start New Document
        textWriter.WriteStartDocument()
        'Write a Comment
        textWriter.WriteComment("This is a comment")
        'Insert Start Element -root element node
        textWriter.WriteStartElement("PersonalData")

        'write the child element
        textWriter.WriteStartElement("products")

        'write the child element
        textWriter.WriteStartElement("product")

        'save the data for the Grid
        Dim productID As String = DirectCast(gvProductNumber.FooterRow.FindControl("txtProductIDInsert"), 

TextBox).Text
        Dim productNumber As String = DirectCast(gvProductNumber.FooterRow.FindControl

("txtProductNumberInsert"), TextBox).Text
        BindGridView()
        Dim dtXMLInsert As DataTable = DirectCast(gvProductNumber.DataSource, DataTable)
        Dim dsgvProductNumber As New DataSet()
        dsgvProductNumber.ReadXml(Server.MapPath("~/xml/PersonDataVI.xml"))
        Dim drInsert As DataRow = dsgvProductNumber.Tables("product").NewRow()
        drInsert("productID") = productID
        drInsert("productNumber") = productNumber
        Dim drParent As DataRow = dsgvProductNumber.Tables("products").Rows(0)
        drInsert.SetParentRow(drParent)
        dsgvProductNumber.Tables("product").Rows.Add(drInsert)
        dsgvProductNumber.WriteXml(Server.MapPath("~/xml/PersonDataVI.xml"))
        BindGridView()

        textWriter.WriteEndElement()
        textWriter.WriteEndElement()

        'write the child element
        textWriter.WriteStartElement("customers")

        'write the child element
        textWriter.WriteStartElement("customer")

        'Write LastName Element and Data
        textWriter.WriteStartElement("LastName", "")
        textWriter.WriteString(txtLastName.Text)
        textWriter.WriteEndElement()

        'Write FirstName Element and Data
        textWriter.WriteStartElement("FirstName", "")
        textWriter.WriteString(txtFirstName.Text)
        textWriter.WriteEndElement()

        'Write Address Element and Data
        textWriter.WriteStartElement("Address", "")
        textWriter.WriteString(txtAddress.Text)
        textWriter.WriteEndElement()

        'Write City Element and Data
        textWriter.WriteStartElement("City", "")
        textWriter.WriteString(txtCity.Text)
        textWriter.WriteEndElement()

        'Write State Element and Data
        textWriter.WriteStartElement("State", "")
        textWriter.WriteString(txtState.Text)
        textWriter.WriteEndElement()

        'Write ZipCode Elment and Data
        textWriter.WriteStartElement("ZipCode", "")
        textWriter.WriteString(txtZipCode.Text)
        textWriter.WriteEndElement()

        'End Everything
        textWriter.WriteEndDocument()

        'Clean up
        textWriter.Flush()
        textWriter.Close()

        'Display the XML Document
        Response.Redirect(Server.MapPath("xml/PersonDataVI.xml"))
    End Sub

...このコードは、フォーム コントロール タグを介して入力されたデータを xml ファイルにコピーするのに適しています。私の質問は、ボタンがクリックされたときに Gridview からデータを XML ファイル内に保持するにはどうすればよいかということです。以前の投稿でアドバイスされたように (Gridview データを保存するためのコード スニペットにコメントしてください)、新しい dataTable を追加し、それにいくつかの列を追加し、いくつかのデータ行を入力して、ボタン イベント ハンドラーに追加しました。しかし、「xml ファイルは別のアプリケーションで使用されています」というエラーが表示されます。私のxmlファイルは空白に戻りました。上で提供したスニペットを見て、私が間違っていることについていくつかのガイダンスを提供してください。

4

1 に答える 1

0

ここには 2 つの問題があります。1. xml を保存するたびに xml ファイルが上書きされるため、以前のデータが失われます。2. xmltextwriter で xml ファイルを開いて保存した後、ファイルを解放するのに少し時間がかかります。一時停止してから開くことができます。xdocument を使用することをお勧めします。この投稿を確認してください:以前のデータを上書きせずに 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("products").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("productID") = productNumber
    dsgvPersonalData.Tables("products").Rows.Add(drNewProduct)

    'Add new Customer
    Dim drNewCustomer As DataRow = dsgvPersonalData.Tables("customesr").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("customerx").Rows.Add(drNewProduct)

    'Save the xml
    dsgvPersonalData.WriteXml(Server.MapPath("~/xml/PersonDataVI.xml"))

    'databinding is easy here
    gvProductNumber.DataSource = dsgvPersonalData.Tables("products")
    gvProductNumber.DataBind()
End Sub
于 2013-08-17T06:56:51.373 に答える