XML实现分页
来源:互联网 发布:tensorflow离线安装包 编辑:程序博客网 时间:2024/06/07 07:39
这次按要求做一个提供地图软件更新版本的WEB端,应为用户不多,设计的都是文本操作,所以不让用数据库了,列表分页的地方只好用XML来实现
public class XmlPage
...{
private int _nowPage;
private int _pageSize;
private int _recordCount;
private int _pageCount;
public int NowPage ...{ get ...{ return _nowPage; } set ...{ _nowPage = value; } }
public int PageSize ...{ get ...{ return _pageSize; } set ...{ _pageSize = value; } }
public int RecordCount ...{ get ...{ return _recordCount; } set ...{ _recordCount = value; } }
public int PageCount ...{ get ...{ return _pageCount; } set ...{ _pageCount = value; } }
public XmlPage() ...{ }
public DataTable GetData(string filePath, string xPathToNodes, PageModelBy model)
...{
XmlDocument xdoc = new XmlDocument();
try
...{
xdoc.Load(filePath);
}
catch (XmlException)
...{
throw new Exception("错误的数据路径");
}
XmlElement root = xdoc.DocumentElement;
XmlNodeList nodeList; //存储符合条件的数据
_recordCount = root.ChildNodes.Count;
if (_pageSize > 0)
...{
if (_recordCount % _pageSize == 0)
...{
_pageCount = _recordCount / _pageSize;
}
else
...{
_pageCount = _recordCount / _pageSize + 1;
}
}
else
...{
_pageCount = 1;
}
if (_nowPage < 1)
...{
_nowPage = 1;
}
else if (_nowPage > _pageCount)
...{
_nowPage = _pageCount;
}
if (_nowPage == 1)
...{
if (_pageSize == 0)
...{
nodeList = xdoc.SelectNodes(xPathToNodes);
}
else
...{
nodeList = xdoc.SelectNodes(xPathToNodes+"[position()<=" + _pageSize + "]");
}
}
else
...{
if (_nowPage > 1)
...{
int startIndex = (_nowPage-1) * _pageSize+1;
int endIndex = startIndex + _pageSize-1;
nodeList = xdoc.SelectNodes(xPathToNodes+"[position()>=" + startIndex.ToString() + " and position()<="+endIndex.ToString()+"]");
}
else
...{
nodeList = xdoc.SelectNodes(xPathToNodes);
}
}
if (nodeList.Count>0)
...{
using (DataTable dt = new DataTable())
...{
if (model == PageModelBy.Element) //以子节点左右分页列
...{
if (nodeList.Item(0).HasChildNodes)
...{
foreach (XmlNode xnode in nodeList.Item(0).ChildNodes) // 创建表结构
...{
dt.Columns.Add(xnode.Name, typeof(string));
}
foreach (XmlNode xnode in nodeList) // 填充数据
...{
DataRow dr = dt.NewRow();
for (int i = 0; i < xnode.ChildNodes.Count; i++)
...{
if (xnode.ChildNodes.Item(i).InnerText != null)
...{
dr[i] = xnode.ChildNodes.Item(i).InnerText;
}
}
dt.Rows.Add(dr);
}
}
}
if (model == PageModelBy.Attribute)// 以元素作为分页列
...{
if (nodeList.Item(0).Attributes.Count != 0)
...{
foreach (XmlAttribute xAtt in nodeList.Item(0).Attributes) // 创建表结构
...{
dt.Columns.Add(xAtt.Name, typeof(string));
}
foreach (XmlNode xnode in nodeList) // 填充数据
...{
DataRow dr = dt.NewRow();
for (int i = 0; i < xnode.Attributes.Count; i++)
...{
dr[i] = xnode.Attributes[i].Value;
}
dt.Rows.Add(dr);
}
}
}
return dt;
}
}
else
...{
return new DataTable();
}
}
public enum PageModelBy
...{
Element,
Attribute
}
}
...{
private int _nowPage;
private int _pageSize;
private int _recordCount;
private int _pageCount;
public int NowPage ...{ get ...{ return _nowPage; } set ...{ _nowPage = value; } }
public int PageSize ...{ get ...{ return _pageSize; } set ...{ _pageSize = value; } }
public int RecordCount ...{ get ...{ return _recordCount; } set ...{ _recordCount = value; } }
public int PageCount ...{ get ...{ return _pageCount; } set ...{ _pageCount = value; } }
public XmlPage() ...{ }
public DataTable GetData(string filePath, string xPathToNodes, PageModelBy model)
...{
XmlDocument xdoc = new XmlDocument();
try
...{
xdoc.Load(filePath);
}
catch (XmlException)
...{
throw new Exception("错误的数据路径");
}
XmlElement root = xdoc.DocumentElement;
XmlNodeList nodeList; //存储符合条件的数据
_recordCount = root.ChildNodes.Count;
if (_pageSize > 0)
...{
if (_recordCount % _pageSize == 0)
...{
_pageCount = _recordCount / _pageSize;
}
else
...{
_pageCount = _recordCount / _pageSize + 1;
}
}
else
...{
_pageCount = 1;
}
if (_nowPage < 1)
...{
_nowPage = 1;
}
else if (_nowPage > _pageCount)
...{
_nowPage = _pageCount;
}
if (_nowPage == 1)
...{
if (_pageSize == 0)
...{
nodeList = xdoc.SelectNodes(xPathToNodes);
}
else
...{
nodeList = xdoc.SelectNodes(xPathToNodes+"[position()<=" + _pageSize + "]");
}
}
else
...{
if (_nowPage > 1)
...{
int startIndex = (_nowPage-1) * _pageSize+1;
int endIndex = startIndex + _pageSize-1;
nodeList = xdoc.SelectNodes(xPathToNodes+"[position()>=" + startIndex.ToString() + " and position()<="+endIndex.ToString()+"]");
}
else
...{
nodeList = xdoc.SelectNodes(xPathToNodes);
}
}
if (nodeList.Count>0)
...{
using (DataTable dt = new DataTable())
...{
if (model == PageModelBy.Element) //以子节点左右分页列
...{
if (nodeList.Item(0).HasChildNodes)
...{
foreach (XmlNode xnode in nodeList.Item(0).ChildNodes) // 创建表结构
...{
dt.Columns.Add(xnode.Name, typeof(string));
}
foreach (XmlNode xnode in nodeList) // 填充数据
...{
DataRow dr = dt.NewRow();
for (int i = 0; i < xnode.ChildNodes.Count; i++)
...{
if (xnode.ChildNodes.Item(i).InnerText != null)
...{
dr[i] = xnode.ChildNodes.Item(i).InnerText;
}
}
dt.Rows.Add(dr);
}
}
}
if (model == PageModelBy.Attribute)// 以元素作为分页列
...{
if (nodeList.Item(0).Attributes.Count != 0)
...{
foreach (XmlAttribute xAtt in nodeList.Item(0).Attributes) // 创建表结构
...{
dt.Columns.Add(xAtt.Name, typeof(string));
}
foreach (XmlNode xnode in nodeList) // 填充数据
...{
DataRow dr = dt.NewRow();
for (int i = 0; i < xnode.Attributes.Count; i++)
...{
dr[i] = xnode.Attributes[i].Value;
}
dt.Rows.Add(dr);
}
}
}
return dt;
}
}
else
...{
return new DataTable();
}
}
public enum PageModelBy
...{
Element,
Attribute
}
}
===============================================
前台调用
我都习惯用返回DataTable数据绑定到Repeater
其实也可以直接返回符合页面条件的XML节点,然后用xslt来显示,这样就把XmlPage里面构建DataTable部分删除就可以了直接返回NodeList
private void BindPage(int nowPage)
...{
//分页
XmlPage myPage = new XmlPage();
myPage.NowPage = nowPage;
myPage.PageSize = 25;
using (DataTable dt = myPage.GetData(BLL.Version.filePath, "/updateinfos/updateinfo/general", XmlPage.PageModelBy.Element))
...{
VersionList.DataSource = dt; //VersionList是Repeat控件ID
}
//分页数据绑定
prePage = (myPage.NowPage - 1).ToString();
nextPage = (myPage.NowPage + 1).ToString();
lastPage = myPage.PageCount.ToString();
nowPage = myPage.NowPage.ToString();
allPages = myPage.PageCount.ToString();
allRecords = myPage.RecordCount.ToString();
perPageRecords = myPage.PageSize.ToString();
Page.DataBind();
}
...{
//分页
XmlPage myPage = new XmlPage();
myPage.NowPage = nowPage;
myPage.PageSize = 25;
using (DataTable dt = myPage.GetData(BLL.Version.filePath, "/updateinfos/updateinfo/general", XmlPage.PageModelBy.Element))
...{
VersionList.DataSource = dt; //VersionList是Repeat控件ID
}
//分页数据绑定
prePage = (myPage.NowPage - 1).ToString();
nextPage = (myPage.NowPage + 1).ToString();
lastPage = myPage.PageCount.ToString();
nowPage = myPage.NowPage.ToString();
allPages = myPage.PageCount.ToString();
allRecords = myPage.RecordCount.ToString();
perPageRecords = myPage.PageSize.ToString();
Page.DataBind();
}
这个分页临时写的,这次的应用不复杂,有些情况可能会BUG,下次再修改一下
- JAVASCRIPT实现XML分页
- JAVASCRIPT实现XML分页
- XML实现分页
- XML实现分页
- JAVASCRIPT实现XML分页
- 使用javascript+xml实现分页
- 使用javascript+xml实现分页
- 使用javascript+xml实现分页
- 使用JavaScript+XML实现分页
- 使用javascript+xml实现分页
- 使用javascript xml实现分页
- 使用javascript xml实现分页
- 使用JavaScript+XML实现分页
- 使用xml绑定实现分页功能
- javascript与xml实现web分页
- 使用javascript+dom+xml实现分页
- 如何实现XML+XSL+javascript数据分页
- 使用javascript+dom+xml实现分页
- PCSX2和GSDX的源代码地址,通过SVN下载。
- 关于用VB读写内存的方法
- Java 週報 > 爪哇教室> 第一個Spring程式 _ 良葛格 的个人空间
- 进入Microsoft Project WMDC项目组,快两周了
- inf安装信息文件的编写-VB编程
- XML实现分页
- (六)JSP基本语法E--response对象
- MSN协议
- 计算UDP校验和遇到的弱智问题。不知道对初学者有没有用。
- 在收藏夹中添加javascript
- rtp和rtcp[转]
- 修改IIS 设置让下载INI等文件
- Oracle查询库表列的信息
- .NET操作EXCEL编程