Asp.Net 操作XML文件的增刪改查 利用GridView

来源:http://www.cnblogs.com/jianxuanbing/archive/2016/05/25/5528985.html
-Advertisement-
Play Games

不廢話,直接上如何利用Asp.NET操作XML文件,並對其屬性進行修改,剛開始的時候,是打算使用JS來控制生成XML文件的,但是最後卻是無法創建文件,讀取文件則沒有使用了 index.aspx 文件 index.aspx.cs文件 Command.cs 文件 UserEdit.aspx UserEd ...


不廢話,直接上如何利用Asp.NET操作XML文件,並對其屬性進行修改,剛開始的時候,是打算使用JS來控制生成XML文件的,但是最後卻是無法創建文件,讀取文件則沒有使用了
index.aspx 文件

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="XmlManager.index" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>XML管理平臺(管理員)</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowEditing="GridView1_RowEditing" OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowDeleting="GridView1_RowDeleting" OnRowUpdating="GridView1_RowUpdating">
            <Columns>
                <%--<asp:BoundField DataField="id" HeaderText="編號" HeaderStyle-Width="100px" />
                <asp:BoundField DataField="key" HeaderText="屬性名" />
                <asp:BoundField DataField="value" HeaderText="屬性值" />
                <asp:BoundField DataField="explain" HeaderText="說明" />--%>
                <asp:TemplateField HeaderText="編號" >
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("id") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>

                <asp:TemplateField HeaderText="屬性名" HeaderStyle-Width="200px">
                    <EditItemTemplate>
                        <asp:TextBox ID="txtKey" runat="server" Text='<%# Bind("key") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label2" runat="server" Text='<%# Bind("key") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>

                <asp:TemplateField HeaderText="屬性值" HeaderStyle-Width="200px">
                    <EditItemTemplate>
                        <asp:TextBox ID="txtValue" runat="server" Text='<%# Bind("value") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label3" runat="server" Text='<%# Bind("value") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>

                <asp:TemplateField HeaderText="說明" HeaderStyle-Width="200px">
                    <EditItemTemplate>
                        <asp:TextBox ID="txtExplain" runat="server" Text='<%# Bind("explain") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label4" runat="server" Text='<%# Bind("explain") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>

                <asp:CommandField ShowEditButton="True" ShowDeleteButton="true" HeaderText="操作" />
            </Columns>
        </asp:GridView>
        <br />
        <br />
        <div>
            id:<asp:TextBox ID="txt_Id" runat="server"></asp:TextBox>&nbsp;
            屬性名:<asp:TextBox ID="txt_Key" runat="server"></asp:TextBox>&nbsp;
            屬性值<asp:TextBox ID="txt_Value" runat="server"></asp:TextBox>&nbsp;
            說明:<asp:TextBox ID="txt_Explain" runat="server"></asp:TextBox>&nbsp;
            <asp:Button ID="Btn_Add" runat="server" Text="添加" OnClick="Btn_Add_Click" />
        </div>
    </div>
    </form>
</body>
</html>

index.aspx.cs文件

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;

namespace XmlManager
{
    public partial class index : System.Web.UI.Page
    {
        Command com = new Command();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                LoadGridView();
            }
        }

        //綁定數據
        private void LoadGridView()
        {
            this.GridView1.DataSource = Command.LoadDs().Tables[0];
            this.GridView1.DataBind();
        }
        //編輯
        protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        {
            GridView1.EditIndex = e.NewEditIndex;
            LoadGridView();
        }
        //數據更新
        protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            Update(e);
            GridView1.EditIndex = -1;
            LoadGridView();
        }
        //取消編輯
        protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            GridView1.EditIndex = -1;
            LoadGridView();
        }
        /// <summary>
        /// 更新xml數據
        /// </summary>
        private void Update(GridViewUpdateEventArgs e)
        {
            string id=((Label)GridView1.Rows[e.RowIndex].FindControl("Label1")).Text;
            string key = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("txtKey")).Text;
            string value = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("txtValue")).Text;
            string explain = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("txtExplain")).Text;
            //Response.Write("<script>alert('" + key+value+explain + "');</script>");
            //通過ID獲取信息,然後更改信息
            XmlDocument doc = new XmlDocument();
            doc.Load(com.XmlFilePath());
            XmlNode information = doc.SelectSingleNode("information");//查找出根節點
            foreach (XmlNode property in information.ChildNodes)
            {
                XmlNode temp_node = property.FirstChild;
                if (temp_node.InnerText == id)
                {
                    //第一種方式
                    //property.RemoveAll();
                    //XmlElement ele_id = doc.CreateElement("id");
                    //ele_id.InnerText = id;
                    //property.AppendChild(ele_id);
                    //另外三個屬性如上

                    //第二種方式
                    property.ChildNodes[1].InnerText = key;
                    property.ChildNodes[2].InnerText = value;
                    property.ChildNodes[3].InnerText = explain;
                    doc.Save(com.XmlFilePath());
                    break;
                }
            }
        }
        //刪除
        protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            Command.Delete(this.GridView1, e);
            LoadGridView();
        }
        //添加節點事件
        protected void Btn_Add_Click(object sender, EventArgs e)
        {
            Add();
            LoadGridView();
            this.txt_Id.Text = "";
            this.txt_Key.Text = "";
            this.txt_Value.Text = "";
            this.txt_Explain.Text = "";
        }
        //添加
        private void Add()
        {
            string id = this.txt_Id.Text;
            string key = this.txt_Key.Text;
            string value = this.txt_Value.Text;
            string explain = this.txt_Explain.Text;
            //從最後一個插入一條數據
            XmlDocument doc = new XmlDocument();
            doc.Load(com.XmlFilePath());
            XmlNode information = doc.SelectSingleNode("information");
            XmlElement property = doc.CreateElement("property");
            
            XmlElement ele_id = doc.CreateElement("id");
            ele_id.InnerText = id;
            property.AppendChild(ele_id);

            XmlElement ele_key = doc.CreateElement("key");
            ele_key.InnerText = key;
            property.AppendChild(ele_key);

            XmlElement ele_value = doc.CreateElement("value");
            ele_value.InnerText = value;
            property.AppendChild(ele_value);

            XmlElement ele_explain = doc.CreateElement("explain");
            ele_explain.InnerText = explain;
            property.AppendChild(ele_explain);

            information.InsertAfter(property, information.LastChild);
            doc.Save(com.XmlFilePath());
        }
    }
}

Command.cs 文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Xml;
using System.IO;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace XmlManager
{
    public class Command:System.Web.UI.Page
    {
        #region 返回當前XML文件路徑
        /// <summary>
        /// 返回當前XML文件路徑
        /// </summary>
        /// <returns></returns>
        public string XmlFilePath()
        {
            return Server.MapPath("test.xml");
        }
        #endregion

        #region 返回載入的XML源
        /// <summary>
        /// 返回載入的xml源
        /// </summary>
        /// <returns></returns>
        public static DataSet LoadDs()
        {
            Command com = new Command();
            //轉換一個XML文件(本地\網路均可)為一個DataSet
            DataSet ds = new DataSet();
            StringReader sreader = null;
            XmlTextReader xtreader = null;
            try
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(com.XmlFilePath());
                sreader = new StringReader(doc.InnerXml);
                xtreader = new XmlTextReader(sreader);
                ds.ReadXml(xtreader);
            }
            catch
            {
                throw;
            }
            finally
            {
                xtreader.Close();
                sreader.Close();
            }
            return ds;
        }
        #endregion

        #region 刪除XML元素
        /// <summary>
        /// 刪除XML元素
        /// </summary>
        /// <param name="grid"></param>
        /// <param name="e"></param>
        public static void Delete(GridView grid, GridViewDeleteEventArgs e)
        {
            Command com = new Command();
            XmlDocument doc = new XmlDocument();
            doc.Load(com.XmlFilePath());
            XmlNode information = doc.SelectSingleNode("information");
            foreach (XmlNode property in information.ChildNodes)
            {
                XmlNode node_id = property.FirstChild;
                if (node_id.InnerText == ((Label)grid.Rows[e.RowIndex].FindControl("Label1")).Text)
                {
                    property.ParentNode.RemoveChild(property);
                }
            }
            doc.Save(com.XmlFilePath());
        }
        #endregion
       
    }
}

UserEdit.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="UserEdit.aspx.cs" Inherits="XmlManager.UserEdit" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>XML管理平臺(用戶版)</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowEditing="GridView1_RowEditing" OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowUpdating="GridView1_RowUpdating">
            <Columns>
                <asp:TemplateField HeaderText="編號" >
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("id") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>

                <asp:TemplateField HeaderText="屬性名" HeaderStyle-Width="200px">
                    <ItemTemplate>
                        <asp:Label ID="Label2" runat="server" Text='<%# Bind("key") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>

                <asp:TemplateField HeaderText="屬性值" HeaderStyle-Width="200px">
                    <EditItemTemplate>
                        <asp:TextBox ID="txtValue" runat="server" Text='<%# Bind("value") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label3" runat="server" Text='<%# Bind("value") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>

                <asp:TemplateField HeaderText="說明" HeaderStyle-Width="200px">
                    <EditItemTemplate>
                        <asp:TextBox ID="txtExplain" runat="server" Text='<%# Bind("explain") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label4" runat="server" Text='<%# Bind("explain") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:CommandField ShowEditButton="True" HeaderText="操作" />
            </Columns>
        </asp:GridView>
        <asp:Button ID="Btn_Down" runat="server" Text="下載配置文件" OnClick="Btn_Down_Click" />
    </div>
    </form>
</body>
</html>

UserEdit.aspx.cs 文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;
using System.Data;
using System.Data.SqlClient;
using System.IO;

namespace XmlManager
{
    public partial class UserEdit : System.Web.UI.Page
    {
        Command com = new Command();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                LoadGridView();
            }
        }
        //綁定數據
        private void LoadGridView()
        {
            this.GridView1.DataSource = Command.LoadDs().Tables[0];
            this.GridView1.DataBind();
        }
        //編輯
        protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        {
            GridView1.EditIndex = e.NewEditIndex;
            LoadGridView();
        }
        //數據更新
        protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            Update(e);
            GridView1.EditIndex = -1;
            LoadGridView();
        }
        //取消編輯
        protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            GridView1.EditIndex = -1;
            LoadGridView();
        }
        /// <summary>
        /// 更新xml數據
        /// </summary>
        private void Update(GridViewUpdateEventArgs e)
        {
            string id = ((Label)GridView1.Rows[e.RowIndex].FindControl("Label1")).Text;
            string key = ((Label)GridView1.Rows[e.RowIndex].FindControl("Label2")).Text;
            string value = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("txtValue")).Text;
            string explain = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("txtExplain")).Text;
            //Response.Write("<script>alert('" + key+value+explain + "');</script>");
            //通過ID獲取信息,然後更改信息
            XmlDocument doc = new XmlDocument();
            doc.Load(com.XmlFilePath());
            XmlNode information = doc.SelectSingleNode("information");//查找出根節點
            foreach (XmlNode property in information.ChildNodes)
            {
                XmlNode temp_node = property.FirstChild;
                if (temp_node.InnerText == id)
                {
                    //第一種方式
                    //property.RemoveAll();
                    //XmlElement ele_id = doc.CreateElement("id");
                    //ele_id.InnerText = id;
                    //property.AppendChild(ele_id);
                    //另外三個屬性如上

                    //第二種方式
                    property.ChildNodes[1].InnerText = key;
                    property.ChildNodes[2].InnerText = value;
                    property.ChildNodes[3].InnerText = explain;
                    doc.Save(com.XmlFilePath());
                    break;
                }
            }
        }
        //流方式下載
        protected void Btn_Down_Click(object sender, EventArgs e)
        {
            string fileName = "user.xml";//客戶端保存的文件名
            string filePath = com.XmlFilePath();//下載的路徑
            //以字元流的形式下載文件
            FileStream fs = new FileStream(filePath, FileMode.Open);
            byte[] bytes = new byte[(int)fs.Length];
            fs.Read(bytes, 0, bytes.Length);
            fs.Close();
            Response.ContentType = "application/octet-stream";//設置輸出流類型——二進位
            //通知瀏覽器下載文件而不是打開
            Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
            Response.BinaryWrite(bytes);
            Response.Flush();
            Response.End();
        }
    }
}

test.xml 文件

<?xml version="1.0" encoding="utf-8"?>
<information>
  <property>
    <id>1</id>
    <key>神獸</key>
    <value>皮卡丘</value>
    <explain>來自寵物小精靈</explain>
  </property>
  <property>
    <id>2</id>
    <key>神獸</key>
    <value>炎帝</value>
    <explain>來自寵物小精靈</explain>
  </property>
  <property>
    <id>3</id>
    <key>神獸</key>
    <value>水君</value>
    <explain>來自寵物小精靈</explain>
  </property>
  <property>
    <id>4</id>
    <key>神獸</key>
    <value>洛基亞</value>
    <explain>來自寵物小精靈</explain>
  </property>
  <property>
    <id>5</id>
    <key>神獸</key>
    <value>金剛武神獸</value>
    <explain>來自數位寶貝</explain>
  </property>
  <property>
    <id>6</id>
    <key>李逍遙</key>
    <value>御劍術</value>
    <explain>來自仙劍一的法術</explain>
  </property>
  <property>
    <id>7</id>
    <key>李逍遙</key>
    <value>萬劍訣</value>
    <explain>來自仙劍一的法術</explain>
  </property>
</information>

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 .內核級線程:切換由內核控制,當線程進行切換的時候,由用戶態轉化為內核態。切換完畢要從內核態返回用戶態;可以很好的利用smp,即利用多核cpu。windows線程就是這樣的。 2. 用戶級線程內核的切換由用戶態程式自己控制內核切換,不需要內核干涉,少了進出內核態的消耗,但不能很好的利用多核Cpu ...
  • LED驅動的實現原理 編寫LED驅動: 測試LED驅動之前需要用USB數據線連接開發板,然後打開電源,成功啟動之後,執行build.sh腳本文件編譯和安裝LED驅動,順利則會自動連接 如果有多個設備文件將會在後來使用,則要通過指針變數cdev.list.prev和cdev.list.next指針變數 ...
  • Linux驅動的工作方式就是交互。例如向Linux印表機驅動發送一個列印命令,可以直接使用C語言函數open打開設備文件,在使用C語言函數ioctl向該驅動的設備文件發送列印命令。編寫Linux驅動最重要的是編寫回調函數,否則與設備文件交互的數據無法得到處理。 建立Linux驅動骨架中使用到兩個函數 ...
  • 一、查看Linux內核版本命令(兩種方法): 1、cat /proc/version [root@S-CentOS home]# cat /proc/versionLinux version 2.6.32-431.el6.x86_64 ([email protected]. ...
  • WIN 下的超動態菜單(一)介紹 作者:黃山松,發表於博客園:http://www.cnblogs.com/tomview/ WINDOWS 編程中,通常彈出菜單的方法是在資源文件中建立菜單資源,然後在程式中裝載資源顯示菜單;另外可以用動態創建菜單的方法,但是逐次調用創建菜單添加菜單項的函數很麻煩。... ...
  • 開發板上安裝嵌入式系統要比手機上簡潔很多,有很多擴展的介面,適合對程式進行測試,這裡所提及的是S3C6410開發板。它是由三星公司推出的一款低功耗/高性價比的RISC處理器。,其中包含強大的硬體加速器,還有集成MFC,還有先進的3D加速器,優化了外部介面。如下圖十OK6410開發板的模型圖,便於理解 ...
  • 一、DDNS簡介 DNS,功能變數名稱系統,是網際網路的一項服務,它作為將功能變數名稱和IP地址相互映射的一個分散式資料庫,能夠使人們更方便的訪問互聯網。 DDNS,動態功能變數名稱系統,是功能變數名稱系統(DNS)中的一種自動更新名稱伺服器內容的技術。在傳統的DNS中,功能變數名稱必須和固定的IP綁定,當IP變化時,必須手動更新IP與功能變數名稱 ...
  • Centos6.6 下載地址:thunder://QUFodHRwOi8vbGludXguemh1YW5neGl0b25nLmNvbTo4MDgvMjAxNTAxL0NlbnRPUy02LjYteDg2XzY0LWJpbi1EVkQxLmlzb1pa 1、首先要下載一個centos的iso鏡像,我是 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...