用DataSet來實現XML數據的添加﹑刪除

xml

對于數據庫的操作﹐一般都用SQL﹑Oracle等。在此﹐本文主要是利用C#來對XML做一些數據的簡單操作﹐實現的功能與對SQL等數據庫的操作一樣。 先在C#中新建一個網頁.添加兩個DataGrid控件和五個TextBox控件及三個Button控件
兩個DataGrid控件的ID分別為DG﹑DG1,其中DG用來用來顯示XML中的數據﹐為了以后需要﹐還要添加一個自定義的模板TemplateColumn,定義一個CheckBox控件﹐ID為ck,五個TextBox控將其中四個是為了實現想XML中添加數據用﹑一個是為了實現向XML數據中查詢的功能。三個Button用與查詢﹑添加﹑刪除﹐ID為Search﹑Add﹑Del﹐books.xml的數據結溝如下:
<Books>
<Books>
<BookId>102</BookId>
<BookName>C++</BookName>
<BookPrice>39</BookPrice>
<Supplier>Phei</Supplier>
</Books>
<Books>
<BookId>103</BookId>
<BookName>VB</BookName>
<BookPrice>52.2</BookPrice>
<Supplier>Pe</Supplier>
</Books>
<Books>
<BookId>105</BookId>
<BookName>Build C++</BookName>
<BookPrice>123</BookPrice>
<Supplier>ww</Supplier>
</Books>
</Books>
1﹑在C#中引用System.IO,在類中定義倆個Static DataSet ds﹐Static DataView dv。然后寫一個顯示XML數據的函數:
private void DG_Bind()
{
FileStream fs=new FileStream(Server.MapPath(".\\")+"xml\\books.xml",FileMode.Open,FileAccess.Read);
StreamReader reader=new StreamReader(fs);
ds=new DataSet();
ds.ReadXml(reader);
fs.Close();
dv=new DataView();
dv=ds.Tables[0].DefaultView;
DG.DataSource=dv;
DG.DataBind();
}
在Page_Load中引用函數:
if(!IsPostBack)
{
DG_Bind();
}

2﹑向XML中添加數據﹕
private void Add_Click(object sender, System.EventArgs e)
{
FileStream fs=new FileStream(Server.MapPath(".\\")+"xml\\books.xml",FileMode.Open,FileAccess.Read);
StreamReader reader=new StreamReader(fs);
ds=new DataSet();
ds.ReadXml(reader);
fs.Close();
DataRow dr=ds.Tables[0].NewRow();
dr["BookName"]=Book.Text.Trim();
dr["BookId"]=Bid.Text.Trim();
dr["BookPrice"]=Price.Text.Trim();
dr["Supplier"]=Supp.Text.Trim();
ds.Tables[0].Rows.Add(dr);
ds.AcceptChanges();

fs=new FileStream(Server.MapPath(".\\")+"xml\\books.xml",FileMode.Create,FileAccess.Write|FileAccess.Read);
StreamWriter writer=new StreamWriter(fs);
ds.WriteXml(writer);
writer.Close();
fs.Close();
DG_Bind();
}

3﹑查詢數據﹐查詢數據很簡單﹐就向DV查詢就OK了﹐主要是利用DV的RowFilter方法。代碼經如下:
private void Search(object sender, System.EventArgs e)
{
dv.Sort="BookName";
dv.RowFilter="BookName like '%"+BookName.Text.Trim()+"%'";
DG1.DataSource=dv;
DG1.DataBind();
}

4﹑數據的刪除并寫入XML文件中,在這里﹐我們就要用到DG中添加的CheckBox控件的TemplateColumn作用了﹐首先利用一個循環來判斷CheckBox是否被選種﹐然后刪除選中的列﹐并寫入XML文件中。具體 的代碼如下﹕
private void Del_Click(object sender, System.EventArgs e)
{
for(int i=0;i<this.DG.Items.Count;i++)
{
CheckBox CK=(CheckBox)this.DG.Items[i].FindControl("ck");
if(CK.Checked)
{
ds.Tables[0].DefaultView.Sort="BookId";
int j=ds.Tables[0].DefaultView.Find(this.DG.Items[i].Cells[1].Text);
ds.Tables[0].DefaultView.Delete(j);
DG.DataSource=ds.Tables[0].DefaultView;
ds.AcceptChanges();
FileStream fs=new FileStream(Server.MapPath(".\\")+"xml\\books.xml",FileMode.Create,FileAccess.Write|FileAccess.Read);
StreamWriter writer=new StreamWriter(fs);
ds.WriteXml(writer);
writer.Close();
fs.Close();
}
}
DG_Bind();
}

5﹑一個利用C#來實現對XML的簡單查詢﹑增加﹑刪除的功能就這樣了﹐其中跟操作SQL﹑Oracle等數據庫的方法一樣﹐沒有什么太的區別﹐希望對大家有點幫助。

时间: 2024-08-03 23:39:03

用DataSet來實現XML數據的添加﹑刪除的相关文章

用自訂函數實現功能-------根據指定表名得到表的結構

               函數功能:根據表名得到表的列名和類型   當我們在編寫sql程序時,多少都會用到一些系統內建的函數,如right(),datalength()等,但是,當我們在工程開發時,如果希望能實現一些符合特殊的要求的處理的話,就需要自已編寫函數,如下面的例子是一個得到表的結構的函數 函數的分類: 1.純量函數:此類函數隻傳導回單一的數據值 2.傳回數據集的函數:傳回一個Table型別的數據集,分為以下兩類:      2.1 行內數據集函數:函數的內容是一個Select 語句

GridView展示大數據的時候會很慢,在線等解決辦法。(.Net)

问题描述 用GridView呈現大數據的話,會等時間較長,有沒有好的解決辦法.(.Net) 解决方案 解决方案二:怎么没用分页?????解决方案三:引用1楼fate1987的回复: 怎么没用分页????? 當然有了解决方案四:GridView展示速度慢,第一分页数据不能太多.第二关闭回调,除非你使用系统的ajax否则(EnableViewState="False")会减少很多__VIEWSTATE中无用信息第三不要在GridView1_RowDataBound里面进行数据查询.基本上就

同一方法實現兩個不同的接口,請問可以嗎?

问题描述 大家好!我想用同一個方法來實現兩個不同的接口,請問可以嗎?在線等!謝謝了! 解决方案 解决方案二:可以的解决方案三:可以,允许对接口实现多继承解决方案四:可以,没问题的解决方案五:可以的只有接口可以多继承解决方案六:但是我的方法裡是不可以的!你們是不是想成了,一個接口由兩個方法來實現了呢?我知道這樣是可以的,而我想的是一個方法來實現兩個不同的接口.同好是相反的!解决方案七:一個方法來實現兩個不同的接口???一个类吧?解决方案八:楼主的实现是什么意思啊?说清楚点吧解决方案九:同一方法當然

如何實現在網頁中輸入的數據保存到數據庫中

问题描述 在vs2005中我創建了一個頁面,上面有幾個文本框,一個綁定了數據庫的gridview控件,現想實現把輸入在文本框中的內容顯示在gridview數據表格中.請各位高手指點如何用C#代碼實現(可增加控件) 解决方案 解决方案二:C#高手一般不来VC版面.解决方案三:HTML代码<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits=&q

如何在SQL Server實現特定時間數據匯出啊

问题描述 我在一個數據庫中建立了兩個表,一個叫new,一個叫old.兩個表中的欄位完全相同,現在由於每天new中增加很多,我想每隔一段時間,把new中的數據匯出(導出)到old中,請問怎麼實現這一功能啊??

表單的數據是用smarty循環出來的,但是提交的時候總是提交最後一個

问题描述 表單的數據是用smarty循環出來的,但是提交的時候總是提交最後一個 表單的數據是用smarty循環出來的,但是提交的時候總是提交最後一個

請問怎麼才能將GRIDVIEW中的數據導到EXCEL並由用戶選擇路徑存入客戶端,並在字符型或所有字段值前加入單引號?

问题描述 求救:我現在用C#寫了幾段代碼都無法解決這個問題!如果用數據流存儲,會出現如果字符串類型的數據導入EXCEL前面的001會直接變為1而用EXCEL存儲,不會有存儲框提示,自動存在了WEB服務器上,也沒任何提示!如何才能讓用戶選擇性存儲到客戶端?多謝方式一:文件流形式(但不能解決0開台的字串問題)protectedvoidGridViewToExcel(GridViewGdv,stringstitle){Response.Clear();Response.Buffer=true;Resp

c#多表查詢結果數據集更新單表問題,各位有沒有好的方法

问题描述 ds的sql語句為selecta.e_no,a.e_name,a.e_dept,b.b_deptname//是顯示b表的部門名稱froma,bwherea.e_dept=b.b_dept現在datagridview改了某行的e_name,只對a表更新有沒有好的方法 解决方案 解决方案二:简单的就是这个updateae_name=''where...解决方案三:在datagridview裡面有可能是新增的,有的可能是修改的,如果就用update是不能的解决方案四:updateasete_

如何在FOXPRO的REPORT中實現列印條碼功能

如何在FOXPRO的REPORT中實現列印條碼功能 作者﹕CCBZZP       以下是我以前做的一個在FOXPRO的FORM調用REPORT中實現列印條碼功能(主要是39條碼),現在將代碼共享給大家,希望能給各位帶來幫助! 1. 首先將字体文件C39HDW3.TTF拷貝到你的電腦的FONTS目錄下.2. 在窗体FORM中新增加兩個程序BC_CODE39和BC_OCODE393. 程序BC_CODE39的內容是:  Parameters m  rtnp = THISFORM.BC_OCode3