我想写一个对XML文件的分页显示程序,最好用DataGrid。请问大家有没有好的例子或者资料。
我想每次按照XML文档中的顺序每次只加载1--10条记录,当点击下一页的时候,再加载11-20条记录,依次下去,请问有没有什么好的办法。
---------------------------------------------------------------
你可以先加载xml文件,然后子查询你的结果集,可以用xpath或者xquery。然后对你的结果集进行分页。例如下面的例子 我设置了一个flag变量,用来if(flag > ((Convert.ToInt32(ViewState["CurrentPageIndex"].ToString())+1)*DataGrid1.PageSize))和if(flag > (Convert.ToInt32(ViewState["CurrentPageIndex"].ToString())*DataGrid1.PageSize))
这两句话来判断要显示的XML元素。然后建立一个DataTable把这些元素写入DataTable中,然后邦定DataGrid。注意DataGrid的EnableViewstate关闭。自己添加上一页和下一页等的导航。
XmlDocument doc=new XmlDocument();
if (File.Exists(Server.MapPath("../SCZB.NET/BB_XML_Data/HZBB_CJZZPQDZ_Query"+DropDownList1.SelectedValue+".xsd")) ¦ ¦ File.Exists(Server.MapPath("../WebApplication1/XMLData/HZBB_CJZZPQDZ_Query"+DropDownList1.SelectedValue+".xsd")))
{
doc.Load(Server.MapPath("../SCZB.NET/BB_XML_Data/HZBB_CJZZPQDZ_Query"+DropDownList1.SelectedValue+".xml"));
//XmlNodeList nodes=doc.SelectNodes("NewDataSet/HZBB_CJZZPQDZ_Query[child::XB_Name='WS9']");
}
else
{
Response.Write("
1<b>没有记录!</b>
");
}
//Create an XmlNamespaceManager for resolving namespaces.
// XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
// nsmgr.AddNamespace("bk", "urn:samples");
XmlElement root = doc.DocumentElement;
XmlNodeList nodeList = root.SelectNodes("/NewDataSet/HZBB_CJZZPQDZ_Query[child::XB_Name='WS9']");
Response.Write(nodeList.Count);
DataTable myTable = MakeNewTable();
int flag=0;
foreach (XmlNode node in nodeList)
{
flag++;
if(flag > ((Convert.ToInt32(ViewState["CurrentPageIndex"].ToString())+1)*DataGrid1.PageSize))
break;
if(flag > (Convert.ToInt32(ViewState["CurrentPageIndex"].ToString())*DataGrid1.PageSize))
{
DataRow myRow = myTable.NewRow();
myRow["XB_Name"] = node.ChildNodes.Item(1).InnerText;
myRow["GZPZ_GZH"] = node.ChildNodes.Item(2).InnerText;
myRow["GZPZ_RWH"] = node.ChildNodes.Item(3).InnerText;
myRow["GZPZ_Count1"] = node.ChildNodes.Item(4).InnerText;
myRow["GS"] = node.ChildNodes.Item(5).InnerText;
myRow["WCGS"] = node.ChildNodes.Item(6).InnerText;
myTable.Rows.Add(myRow);
}
}
DataGrid1.DataSource=myTable;
DataGrid1.CurrentPageIndex=0;
DataGrid1.DataBind();