外repeater:id为main1.用于显示分类
内repeater:id为main2.用于显示该分类下的信息列表因为用的无限级分类,且分类很多,用的是递归读取,所以首页执行很慢,所以决定后台先用dataset生成xml作为数据源进行读取。(分类为一个xml,每个分类下的列表信息各为一个xml)开始是是常用的方法 通过ItemDataBound获取main1的id读取信息,显示正常;然后都改成xml做为数据源:try
{
ds.ReadXml(Server.MapPath("xml/index_main1.xml"));
main1.DataSource = ds;
main1.DataBind();
ds.Reset();
}
catch
{
ds = null;
}这个是protected void main1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater main2 = (Repeater)e.Item.FindControl("main2"); DataRowView view = (DataRowView)e.Item.DataItem;
int CategorieId = Convert.ToInt32(view["ID"]);
DataSet ds2 = new DataSet();
main2.DataSource = ds2.ReadXml(Server.MapPath("xml/list/index_main1_" + CategorieId + ".xml")); ;
main2.DataBind();
}
}
结果只能显示第一个分类,而且里面的列表也不显示。后来我把main1的数据源改为dataset
把main1_ItemDataBound的注释掉,可以显示所有的分类(DataRowView view = (DataRowView)e.Item.DataItem;已经换成System.Data.Common.DbDataRecord view = (System.Data.Common.DbDataRecord)e.Item.DataItem;)
不注释就出现这个错误main2 使用的是无效数据源。有效数据源必须实现 IListSource 或 IEnumerable。main2.DataSource = ds2.ReadXml(Server.MapPath("xml/list/index_main1_" + CategorieId + ".xml"));这个应该可以看出内嵌注释掉了,外侧就可以循环了,这个是为什么?如果一定要2个地方都用xml做数据源 该怎么解决?
内repeater:id为main2.用于显示该分类下的信息列表因为用的无限级分类,且分类很多,用的是递归读取,所以首页执行很慢,所以决定后台先用dataset生成xml作为数据源进行读取。(分类为一个xml,每个分类下的列表信息各为一个xml)开始是是常用的方法 通过ItemDataBound获取main1的id读取信息,显示正常;然后都改成xml做为数据源:try
{
ds.ReadXml(Server.MapPath("xml/index_main1.xml"));
main1.DataSource = ds;
main1.DataBind();
ds.Reset();
}
catch
{
ds = null;
}这个是protected void main1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater main2 = (Repeater)e.Item.FindControl("main2"); DataRowView view = (DataRowView)e.Item.DataItem;
int CategorieId = Convert.ToInt32(view["ID"]);
DataSet ds2 = new DataSet();
main2.DataSource = ds2.ReadXml(Server.MapPath("xml/list/index_main1_" + CategorieId + ".xml")); ;
main2.DataBind();
}
}
结果只能显示第一个分类,而且里面的列表也不显示。后来我把main1的数据源改为dataset
把main1_ItemDataBound的注释掉,可以显示所有的分类(DataRowView view = (DataRowView)e.Item.DataItem;已经换成System.Data.Common.DbDataRecord view = (System.Data.Common.DbDataRecord)e.Item.DataItem;)
不注释就出现这个错误main2 使用的是无效数据源。有效数据源必须实现 IListSource 或 IEnumerable。main2.DataSource = ds2.ReadXml(Server.MapPath("xml/list/index_main1_" + CategorieId + ".xml"));这个应该可以看出内嵌注释掉了,外侧就可以循环了,这个是为什么?如果一定要2个地方都用xml做数据源 该怎么解决?
因为该分类下又很多子分类,数据量多,最后还要在海量数据库里in操作
所以感觉非常慢除了静态页我觉得xml暂时可以减轻点负担?
2、确实是网页加载数量太多造成页面显示过慢,那就使用分页,减少加载的数量;
3、使用XML和使用数据库都会消耗性能的,主要还是有效的利用内存;