日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

XML数据的分页显示

發(fā)布時間:2025/3/21 asp.net 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 XML数据的分页显示 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我的個人網(wǎng)站上有一個頁面,主要介紹了一些我喜歡的書籍,目前有9本,這樣把頁面拉的很長,挺影響美觀的,于是決定分頁顯示它們。我沒有SQL數(shù)據(jù)庫,而且我也不想用復(fù)雜的數(shù)據(jù)庫來存放這種簡單的數(shù)據(jù),所以我用的是XML文件,把它讀入DataSet,然后再在Repeater中顯示。

如果是SQL數(shù)據(jù)庫或Access等,分頁到是挺簡單的,但是我存放數(shù)據(jù)的是XML文件,又不能用SQL語句,怎么辦呢?問了一個高手,知道了還有一種叫XPath的語言,又學(xué)到一些東西了,不敢偷懶,馬上記下。

//首先嘗試從緩存中讀取
XmlDataDocument?doc?=?SiteCache.Get("Doc")?as?XmlDataDocument;
DataSet?ds?
=?SiteCache.Get("Books")?as?DataSet;
if(doc?==?null?&&?ds?==?null)?{
????
string?path;
????
if(HttpContext.Current?!=?null)
????????path?
=?HttpContext.Current.Server.MapPath("~/Content/Books.xml");
????
else
????????path?
=?Directory.GetCurrentDirectory()?+?Path.DirectorySeparatorChar?+?"Content/Books.xml";

????ds?
=?new?DataSet();
????ds.ReadXml(path);
????
????doc?
=?new?XmlDataDocument(ds);
????SiteCache.Max(
"Doc",?doc,?new?System.Web.Caching.CacheDependency(path));
????SiteCache.Max(
"Books",?ds,?new?System.Web.Caching.CacheDependency(path));
}


//總數(shù)據(jù)項(xiàng)為DataRow的個數(shù)
pager.TotalRecords?=?ds.Tables[0].Rows.Count;
int?current?=?pager.PageIndex?*?pager.PageSize;
int?target?=?current?+?pager.PageSize;

string?xpath?=?String.Format("/Books/Book[position()>{0}?and?position()<={1}]",?current,?target);

XmlNodeList?nodes?
=?doc.DocumentElement.SelectNodes(xpath);
DataRow?row?
=?null;
DataSet?ds2?
=?ds.Clone();
ds2.Clear();
foreach(XmlNode?node?in?nodes)?{
????row?
=?doc.GetRowFromElement((XmlElement)node);
????
//ds2.Tables[0].Rows.Add(row);?不能用這樣的語句,否則會拋異常
????ds2.Tables[0].ImportRow(row);
}

books.DataSource?
=?ds2;
books.DataBind();

上面的代碼中,pager是一個分頁控件,books是一個Repeater,用XPath選擇要讀取的節(jié)點(diǎn),把它賦值到一個DataRow中,然后將之導(dǎo)入DataTable中,再綁定到Repeater上,就可以顯示了。這里遇到個小問題,不能用ds2.Tables[0].Rows.Add(row);這個語句,否則會拋個“此DataRow已屬于另一個DataTable”的異常,不知為什么,改為ImportRow就沒問題了。希望哪位高手知道,請告訴我一聲,謝謝。

http://chengbo.net/books.aspx

總結(jié)

以上是生活随笔為你收集整理的XML数据的分页显示的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。