logo

GridView 保存 XML 一例

作者:孟宪会 阅读:481 发表于:2011-11-01 14:10:00

下面是一个使用GridView控件添加数据,并保存到 XML 文件的例子。初始化时文件可以不存在,可以为空内容

 

ClientEmails.xml 内容格式
<?xml version="1.0" standalone="yes"?>
<c>
  
<e id="1">
    
<name>xx</name>
    
<email>xx.com</email>
  
</e>
  
<e id="2">
    
<name>xx</name>
    
<email>xx.com</email>
  
</e>
</c>

完整的实现代码

ASPX 代码
<%@ Page Language="C#" Trace="false" AutoEventWireup="true" %>

<%@ Import Namespace="System.IO" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

  protected
void Page_Load(object sender, EventArgs e)
  {
    
if (!Page.IsPostBack)
    {
      String file
= Server.MapPath("~/App_Data/ClientEmails.xml");
      
if (!System.IO.File.Exists(file))
      {
        HiddenField1.Value
= "Blank";
        
return;
      }
      String xml
= System.IO.File.ReadAllText(file);
      
if (xml.Trim().Equals(String.Empty))
      {
        HiddenField1.Value
= "Blank";
        
return;
      }
      bind();
    }
  }

  
void bind()
  {
    System.Data.DataSet ds
= new System.Data.DataSet();
    ds.ReadXml(Server.MapPath(
"~/App_Data/ClientEmails.xml"));
    grvEmail.DataSource
= ds.Tables[0];
    grvEmail.DataBind();

    grvEmail.HeaderRow.Cells[
0].Text = "姓名";
    grvEmail.HeaderRow.Cells[
1].Text = "电子邮件";
    grvEmail.HeaderRow.Cells[
2].Visible = false;
    grvEmail.FooterRow.Cells[
2].Visible = false;
    
for (int i = 0; i < grvEmail.Rows.Count; i++)
    {
      grvEmail.Rows[i].Cells[
2].Visible = false;
    }
  }
  protected
void Button1_Click(object sender, EventArgs e)
  {
    
if (HiddenField1.Value.Equals("Blank"))
    {
      
// 首次添加。创建新文件
      String file = Server.MapPath("~/App_Data/ClientEmails.xml");
      
if (System.IO.File.Exists(file))
      {
        System.IO.File.Delete(file);
      }

      System.Xml.XmlDocument doc
= new System.Xml.XmlDocument();
      
//创建xml声明
      System.Xml.XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", "yes");
      doc.AppendChild(dec);
      System.Xml.XmlNode root
= doc.CreateElement("c");
      System.Xml.XmlNode ee
= doc.CreateElement("e");
      System.Xml.XmlAttribute id
= doc.CreateAttribute("id");
      id.Value
= "-100";
      ee.Attributes.Append(id);
      System.Xml.XmlNode name
= doc.CreateElement("name");
      System.Xml.XmlNode email
= doc.CreateElement("email");
      ee.AppendChild(name);
      ee.AppendChild(email);
      root.AppendChild(ee);
      doc.AppendChild(root);
      doc.Save(file);
    }

    System.Data.DataSet ds
= new System.Data.DataSet();
    ds.ReadXml(Server.MapPath(
"~/App_Data/ClientEmails.xml"));
    System.Data.DataTable table
= ds.Tables[0];
    System.Data.DataRow[] rs
= table.Select("", "id desc");
    String MaxId
= rs[0]["id"].ToString();
    
int maxId = MaxId == "-100" ? 0 : Int32.Parse(MaxId);
    
for (int i = 0; i < Request.Form.AllKeys.Length; i++)
    {
      string id
= "";
      
if (Request.Form.AllKeys[i].StartsWith("xm"))
      {
        maxId
++;
        id
= Request.Form.AllKeys[i].Substring(2);
        String xm
= Request.Form["xm" + id];
        String yj
= Request.Form["yj" + id];
        System.Data.DataRow dr
= table.NewRow();
        dr[
"name"] = xm;
        dr[
"email"] = yj;
        dr[
"id"] = maxId;
        table.Rows.Add(dr);
      }
    }
    
if (MaxId == "-100")
    {
      table.Rows.RemoveAt(
0);
      table.AcceptChanges();
    }
    ds.WriteXml(Server.MapPath(
"~/App_Data/ClientEmails.xml"));

    Response.Redirect(Request.UrlReferrer.ToString());
  }
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
  
<title>无标题页</title>
  
<script type="text/javascript">
    
var xm = '<%=TextBox1.ClientID %>';
    
var yj = '<%=TextBox2.ClientID %>';
    
var tb = '<%=grvEmail.ClientID %>';
    
var button1 = '<%=Button1.ClientID %>';
    
var i = 0;    
    
function Add() {
      x
= document.getElementById(xm).value;
      y
= document.getElementById(yj).value;
      t
= document.getElementById(tb);
      
      
if (!t) {
        t
= document.createElement("table");
        t.setAttribute(
"cellspacing",0);
        t.setAttribute(
"rules","all");
        t.setAttribute(
"border","1");
        t.setAttribute(
"style","border-collapse:collapse");
        t.id
= "grvEmail";
        tbody
= document.createElement("tbody");
        tr
= document.createElement("tr");
        th
= document.createElement("th");
        th.setAttribute(
"scope","col");
        th.innerHTML
= "姓名";
        tr.appendChild(th)
        th
= document.createElement("th");
        th.setAttribute(
"scope","col");
        th.innerHTML
= "电子邮件";
        tr.appendChild(th)
        tbody.appendChild(tr)
        t.appendChild(tbody)

        button1
= document.getElementById(button1);
        button1.parentNode.insertBefore(t, button1);
      }
      tr
= document.createElement("tr");
      td
= document.createElement("td");
      td.innerHTML
= x + "<input name=xm" + i + " value='" + x + "' type='hidden'>";
      tr.appendChild(td);
      td
= document.createElement("td");
      td.innerHTML
= y + "<input name=yj" + i + " value='" + y + "' type='hidden'>"; ;
      tr.appendChild(td);
      t.tBodies[
0].appendChild(tr);
      i
++;
      
return false;
    }
  
</script>
</head>
<body>
  
<form id="form1" runat="server">
  姓名:
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
  邮件:
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
  
<asp:Button ID="Button2" runat="server" Text="添加" OnClientClick="return Add()" />
  
<asp:GridView ID="grvEmail" runat="server">
  
</asp:GridView>
  
<asp:HiddenField ID="HiddenField1" runat="server" />
  
<asp:Button ID="Button1" runat="server" Text="保存" OnClick="Button1_Click" />
  
</form>
</body>
</html>