本帖最后由 cangye6400 于 2011-09-16 13:12:42 编辑

解决方案 »

  1.   

    数据的量少 ,从数据库一次性读取出来,你绑定多少个 repeater都没太大的影响加载页面时  数据量大     执行数据库次数太多,那样加载才慢
      

  2.   

    repeater绑定数据和循环输出html有区别?
      

  3.   

    一个页面15个Repeater,没见过这么多的,不知道你要实现神马功能,要用到这么多。
      

  4.   

    应该是你的设计上有问题吧,干嘛用这么多repeater呢?其它的数据控件不让你用吗?
      

  5.   

    对啊!不知道你做什么功能一个页面用15个repeater!不说速度了.光是代码都让人看到很厌烦!
      

  6.   

    信息发布类网站首页就是有这么多    protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                DataSet ds = db.GetDataSet("Select * From [v_NewList] ");
                if (ds != null)
                {
                    DataTable dt=ds.Tables[0];
                    //最新资讯
                    rp_01.DataSource = setDataTable(dt.Columns, dt.Select("sid=1","OrderID DESC,FBDate DESC,id DESC"));
                    rp_01.DataBind();
                    //院校介绍
                    rp_02.DataSource = setDataTable(dt.Columns, dt.Select("sid=4", "OrderID DESC,FBDate DESC,id DESC"));
                    rp_02.DataBind();
                    //政策公告
                    rp_03.DataSource = setDataTable(dt.Columns, dt.Select("sid=2", "OrderID DESC,FBDate DESC,id DESC"));
                    rp_03.DataBind();
                    //招生简章
                    rp_04.DataSource = setDataTable(dt.Columns, dt.Select("sid=3", "OrderID DESC,FBDate DESC,id DESC"));
                    rp_04.DataBind();
                    //通知
                    rp_05.DataSource = setDataTable(dt.Columns, dt.Select("sid=18", "OrderID DESC,FBDate DESC,id DESC"));
                    rp_05.DataBind();
                    //留言
                    rp_06.DataSource = db.GetDataSet("Select top 6 * From gl_guestbook Where isCheck=1 Order by CreatTime DESC,id DESC");
                    rp_06.DataBind();
                    //院校博览
                    rp_07.DataSource = setDataTable(dt.Columns, dt.Select("sid=19", "OrderID DESC,FBDate DESC,id DESC"));
                    rp_07.DataBind();
                    //解题技巧
                    rp_08.DataSource = setDataTable(dt.Columns, dt.Select("sid=8", "OrderID DESC,FBDate DESC,id DESC"));
                    rp_08.DataBind();
                    //经验心得
                    rp_09.DataSource = setDataTable(dt.Columns, dt.Select("sid=9", "OrderID DESC,FBDate DESC,id DESC"));
                    rp_09.DataBind();
                    //高升专
                    rp_10.DataSource = setDataTable(dt.Columns, dt.Select("sid=5", "OrderID DESC,FBDate DESC,id DESC"));
                    rp_10.DataBind();
                    //高升本
                    rp_11.DataSource = setDataTable(dt.Columns, dt.Select("sid=6", "OrderID DESC,FBDate DESC,id DESC"));
                    rp_11.DataBind();
                    //专升本
                    rp_12.DataSource = setDataTable(dt.Columns, dt.Select("sid=7", "OrderID DESC,FBDate DESC,id DESC"));
                    rp_12.DataBind();
                    //毕业论文
                    rp_13.DataSource = setDataTable(dt.Columns, dt.Select("sid=10", "OrderID DESC,FBDate DESC,id DESC"));
                    rp_13.DataBind();
                    //学位英文
                    rp_14.DataSource = setDataTable(dt.Columns, dt.Select("sid=11", "OrderID DESC,FBDate DESC,id DESC"));
                    rp_14.DataBind();
                    //视频课件
                    rp_15.DataSource = setDataTable(dt.Columns, dt.Select("sid=12", "OrderID DESC,FBDate DESC,id DESC"));
                    rp_15.DataBind();
                    //招聘信息
                    rp_16.DataSource = setDataTable(dt.Columns, dt.Select("sid=13", "OrderID DESC,FBDate DESC,id DESC"));
                    rp_16.DataBind();
                    //求职技巧
                    rp_17.DataSource = setDataTable(dt.Columns, dt.Select("sid=14", "OrderID DESC,FBDate DESC,id DESC"));
                    rp_17.DataBind();
                    //研究生报才
                    rp_18.DataSource = setDataTable(dt.Columns, dt.Select("sid=15", "OrderID DESC,FBDate DESC,id DESC"));
                    rp_18.DataBind();
                    //出国留学
                    rp_19.DataSource = setDataTable(dt.Columns, dt.Select("sid=16", "OrderID DESC,FBDate DESC,id DESC"));
                    rp_19.DataBind();
                    //职业培训
                    rp_20.DataSource = setDataTable(dt.Columns, dt.Select("sid=17", "OrderID DESC,FBDate DESC,id DESC"));
                    rp_20.DataBind();
                    //毕业证书
                    rp_21.DataSource = setDataTable(dt.Columns, dt.Select("sid=20", "OrderID DESC,FBDate DESC,id DESC"));
                    rp_21.DataBind();
     
                }
            }
        }
        /// <summary>
        /// 强型转换
        /// </summary>
        /// <param name="columns"></param>
        /// <param name="rows"></param>
        /// <returns></returns>
        private DataTable setDataTable(DataColumnCollection columns,DataRow[] rows)
        {
            DataTable dt = new DataTable();
            foreach (DataColumn col in columns)
            {
                DataColumn ncol = new DataColumn(col.ColumnName, col.DataType);
                dt.Columns.Add(ncol);
            }
            foreach (DataRow row in rows)
            {
                dt.Rows.Add(row.ItemArray);
            }
            return dt;
        }
      

  7.   

    [v_NewList]是我SQL定义的一个视图,将所有需要显示的数据都绑在一起
      

  8.   

    如果每个repeater只要绑定一个数据,15个不多,如果要绑定多个数据,分页,你懂得
      

  9.   

    绑定15个Repeater不算多(估计是网站首页吧),但是你代码如果这样设计就有些不合理了(太多冗余代码),把代码简化下吧!你懂得...
      

  10.   

    不多,和直接输出html一样,不会影响把
      

  11.   

    如果Repeater没什么操作的话,可以在Repeater上面加上EnableViewState="false"
      

  12.   

    是首页,不用分页的。不用repeater怎么办呢?只能能在后台写大量代码,用了repeater又在前台写大量代码
      

  13.   

    我也是类似这么做的,但通篇最后一个DataBind();
    就可以了啊
      

  14.   

    还要看你的视图怎么做CREATE  view [dbo].[v_NewList] as
    SELECT top 12 id,bid,[sid],kid,title,cast(infor as nvarchar(500)) as infor,url,hits,fbdate,link,Orderid From gl_NewsSystem Where isCheck=1  and sid=1 Order by isTop DESC,OrderID DESC,FBDate DESC,id DESC
    UNION
    SELECT top 5 id,bid,[sid],kid,title,cast(infor as nvarchar(500)) as infor,url,hits,fbdate,link,ORderid From gl_NewsSystem Where isCheck=1  and sid=4 Order by isTop DESC,OrderID DESC,FBDate DESC,id DESC
    UNION
    SELECT top 5 id,bid,[sid],kid,title,cast(infor as nvarchar(500)) as infor,url,hits,fbdate,link,ORderid From gl_NewsSystem Where isCheck=1  and sid=2 Order by isTop DESC,OrderID DESC,FBDate DESC,id DESC
    UNION
    SELECT top 5 id,bid,[sid],kid,title,cast(infor as nvarchar(500)) as infor,url,hits,fbdate,link,ORderid From gl_NewsSystem Where isCheck=1  and sid=3 Order by isTop DESC,OrderID DESC,FBDate DESC,id DESC
    UNION
    ....
      

  15.   

    我的视图已经选取好每块的记录数,所以我的dt.select不用再去考虑记录数的问题
      

  16.   

    建议到前台 aspx页面<%for……%> 循环输出
      

  17.   

    你也可以把你要读取的数据分为15个html页面来读啊,然后在首页加载这个15个页面,这样的话只是每个页面调用同一个方法就行了。
      

  18.   

    我是ACCESS数据库,只能select.. union all..
    不过你的代码也是循环出来的,感觉rowfilter跟你的setDataTable方法效率也差不多吧?
      

  19.   

    那么多子查询,应该想到用Repeater在后台动态绑定吧
    嵌套用法
    http://www.cnblogs.com/zmxmiss/archive/2009/02/26/1398635.html
    http://tmouse.cnblogs.com/archive/2006/05/28/256274.html
      

  20.   

    比如说新网网首页,假设把各种循环子类都套用在Repeater上,我想不止40个Repeater吧。不过第一,人家肯定是分模块、分层、分子系统开发的,然后首页只是一个胶水把这40个Repeater粘在一起,而它自己并不去创建Repeater。第二,人家也不可能总是读取数据库啊。
      

  21.   

    string Html = @"<span class='list'><a href='" + AppcationPath + @"gouwu/detail_{1}.html'><img alt='' {0} /></a></span>";str.AppendFormat(Html, "src='" + AppcationPath + "images/gouwu/" + Pi.ProImage + "'", Pi.RecPro_ID);return str.ToString();后台绑也可以的.