首 页 | 新 闻 | 技术中心 | 第二书店 | 《程序员》 | 《开发高手》 | 社 区 | 黄 页 | 人 才
移 动专 题SUNIBM微 软微 创精 华Donews人 邮
我的技术中心 
我的分类 我的文档
全部文章 发表文章
专栏管理 使用说明



 RSS 订阅 
最新文档列表
Windows/.NET
.NET  (rss)    
Visual C++  (rss)    
Delphi  (rss)    
Visual Basic  (rss)    
ASP  (rss)    
JavaScript  (rss)    
Java/Linux
Java  (rss)    
Perl  (rss)    
综合
其他开发语言  (rss)    
文件格式  (rss)    
企业开发
游戏开发  (rss)    
网站制作技术  (rss)    
数据库
数据库开发  (rss)    
软件工程
其他  (rss)    

积极原创作者 
tellmenow (22)
cutemouse (22)
softj (78)
iiprogram (69)
qdzx2008 (50)
goodboy1881 (14)
wangchinaking (58)
fancyhf (1)
harrymeng (41)
yjz0065 (113)
CSDN - 文档中心 - Visual C++ 阅读:5036   评论: 1    参与评论
标题   使用c#+(datagrid控件)编辑xml文件     选择自 ouyang76cn 的 Blog
关键字   c#,datagrid,asp.net
出处  

使用c#+(datagrid控件)编辑xml文件

这个源码是我根据网上一个vb.net编辑xml文件的原理用c#重写的。除重用xml文件外.
并未重用任何代码!.

这小段代码,可对xml文件的记录进行删除,修改,或增加新记录。
利用了datagrid控件的sortcommand事件对xml里的记录进行排序。

email:ouyang76.263.net
------------------------------------------
<%@page language="c#" Trace="true"%>
<%@import namespace="System.Data"%>
<%@import namespace="System.IO"%>
<script language="c#" runat="server">
string xmlfile="books2.xml",xpath;
void page_load(Object obj,EventArgs e)
{
xpath=Server.MapPath(xmlfile);
  if(!Page.IsPostBack)
   {
      Dataload("isbn");
      }
  }
 
  void Dataload(string psort)
  {
    DataSet ds=new DataSet();
    FileStream fs=new FileStream(xpath,FileMode.Open);
    ds.ReadXml(fs);
  
   if(ds.Tables.Count==0)
      {
        Response.Write("xml文件内无记录!!!!");
        fs.Close();
        Response.End();
        }
    Trace.Warn("表记录数",Convert.ToString(ds.Tables[0].Rows.Count));
   
    DataRow dr=ds.Tables[0].NewRow();//新建一行
    dr["ISBN"] = " Add ISBN";
    ds.Tables[0].Rows.InsertAt(dr,0);//插入到第0行位置
  
    Trace.Warn("表数目",Convert.ToString(ds.Tables.Count));//以红字显示调试信息
   
    //grid1.DataSource=ds.Tables[0].DefaultView;
    //grid1.DataBind();
   
    DataView dv=new DataView(ds.Tables[0]);
    Trace.Warn("字串长度:"+psort,Convert.ToString(psort.Length));//排序字符串的长度
    if(psort.Length>0)
         dv.Sort=psort;
       
    grid1.DataSource=dv;
    grid1.DataBind();
    fs.Close();
  }
 
  void grid_sort(Object obj,DataGridSortCommandEventArgs e)
  {
   if(grid1.EditItemIndex==-1)
     Dataload(e.SortExpression);
    else
     Response.Write("正在编辑暂不能排序!!");
  }
 
  void grid_edit(Object obj,DataGridCommandEventArgs e)
  {
  grid1.EditItemIndex=(int)e.Item.ItemIndex;
  show_del("hide");
  Dataload("");
  }
 
  void grid_cancel(Object obj,DataGridCommandEventArgs e)
  {
  grid1.EditItemIndex=-1;
  show_del("show");
  Dataload("");
  }
 
  void grid_update(Object obj,DataGridCommandEventArgs e)
  {
  int numcell=e.Item.Cells.Count;//单元格数目(e.Item是当前发生事件的表格行)
  int currentrow=e.Item.DataSetIndex;
  //int curr2=e.Item.ItemIndex;//与上句等价,可以不带(int)
  Trace.Warn("当前更新行号 = ",Convert.ToString(currentrow));
  //Trace.Warn("2当前更新行号 = ",Convert.ToString(curr2));
 
    DataSet ds=new DataSet();
    ds.ReadXml(xpath);//将xml模式和数据读取到dataSet;
    DataRow dr;//表示DataTable中的一行信息.
 
     if(currentrow==0)
       dr=ds.Tables[0].NewRow();
     else
       dr=ds.Tables[0].Rows[e.Item.DataSetIndex - 1];
   
    string[] str={"isbn", "author", "title", "category", "comments"};
    int j=-1;
    for(int i=2;i<numcell;i++)//跳过1和2column
     {
        j=j+1;
        string ctext;
        ctext=((TextBox)e.Item.Cells[i].Controls[0]).Text;
       
        dr[str[j]] = ctext;
        Trace.Warn(Convert.ToString(i)+str[j]+":每一行的文本",ctext);
       }
      
    if(currentrow==0)
    {
      Response.Write("加入新记录!!");
      ds.Tables[0].Rows.InsertAt(dr,0);
      }
     
    ds.WriteXml(xpath);//将表示dataset的xml写入到xml文件中,包括数据和模式.
    grid1.EditItemIndex = -1;//无此句仍在编辑界面
    show_del("show");
    Dataload("");
  }
 
  void show_del(string state)
  {
  string tmp=state;
  switch(tmp)
  {
   case "show":
   grid1.Columns[0].Visible = true;
     break;
   case "hide":
    grid1.Columns[0].Visible = false;
     break;
     default:
   grid1.Columns[0].Visible = true;
     break;//也要带break
    }
  }

  void initialize(Object obj,DataGridItemEventArgs e)//注意参数与其它函数不同
  {
     //e.Item.Cells[0].Text="aaaaa";//
     if(e.Item.ItemIndex==0)//如果是第一行
     {
     LinkButton a0=new LinkButton();
     a0=(LinkButton)e.Item.Cells[0].Controls[0];
    
     LinkButton a1=new LinkButton();
     a1=(LinkButton)e.Item.Cells[1].Controls[0];//在grid内建一个linkbutton控件
    
    if(a0.Text=="删 除")
        a0.Text="";
    if(a1.Text=="编 辑")
         a1.Text="[AddNew]";
      }
   }
  
  void grid_del(Object obj,DataGridCommandEventArgs e)
  {
  Response.Write("XX");
  Trace.Warn("正要删除",Convert.ToString(e.Item.ItemIndex));//控件中的行数
  int curr=e.Item.ItemIndex;
    DataSet ds=new DataSet();
    ds.ReadXml(xpath);
   
    DataRow dr=ds.Tables[0].Rows[curr-1];//有一行是新加的。
    dr.Delete();//找到相应的数据行,将其删除
    ds.WriteXml(xpath);
 
  grid1.EditItemIndex = -1;
  Dataload("");

  }
</script>

<form runat="server">
<asp:datagrid id="grid1" runat="server"
alternatingitemstyle-backcolor="#eeeeee"
headerstyle-backcolor="lightyellow"
font-size="10pt"
allowsorting="true"
onsortcommand="grid_sort"
oneditcommand="grid_edit"
oncancelcommand="grid_cancel"
onupdatecommand="grid_update"
onitemcreated="initialize"   
ondeletecommand="grid_del"
bordercolor="#999999"
>
<columns>
<asp:buttoncolumn text="删 除" commandname="delete"/>
<asp:editcommandcolumn buttontype="linkbutton" updatetext="更 新" canceltext="取 消" edittext="编 辑" headertext=""/>
</columns>
</asp:datagrid>
</form>
--------------------------------------------------------------------
xml文件(文件名:books2.xml)

<?xml version="1.0" standalone="yes"?>
<books>
  <book>
    <isbn>2e2e2we2we2</isbn>
    <author>fefdw</author>
    <title>2e2eef</title>
    <category>324tg</category>
    <comments>r3rrgeqw21</comments>
  </book>
  <book>
    <isbn>1234345</isbn>
    <author>ssdfdfe</author>
    <title>fgregre</title>
    <category>r4er43trt</category>
    <comments>r3r3redqeq</comments>
  </book>
  <book>
    <isbn>1234345</isbn>
    <author>ssdfdfe</author>
    <title>fgregre</title>
    <category>r4er43trt</category>
    <comments>r3r3redqeq</comments>
  </book>
  <book>
    <isbn>0679757651</isbn>
    <author>Tom Peters</author>
    <title>Circle of Innovation</title>
    <category>marketing</category>
    <comments>His most recent book is his best by far!</comments>
  </book>
  <book>
    <isbn>0884270610</isbn>
    <author>Eli Goldthrait</author>
    <title>The Goal</title>
    <category>management</category>
    <comments>Advocate of Theory of Constraints as applied to managment and optimization.</comments>
  </book>
  <book>
    <isbn>068485600X</isbn>
    <author>Jeff Cox, Howard Stevens</author>
    <title>Selling the Wheel</title>
    <category>management</category>
    <comments>Excellent Treatise/Novel on the entire Sales Cycle</comments>
  </book>
  <book>
    <isbn>0672316498</isbn>
    <author>Alan Cooper</author>
    <title>The Inmates Are Running The Asylum</title>
    <category>management</category>
    <comments>The father of Visual Basic and creator of the new art of Interaction Design - very valuable in designing websites. Basically the worlds most cutting edge thinker in User Interface design aimed at simplifying software use.</comments>
  </book>
</books>


相关文章
对该文的评论
yclyz ( 2002-04-17)
好东东,收!!!