减少ItemDataBound事件时间

时间:2012-04-23 06:44:10

标签: asp.net datalist itemdatabound

我有100家酒店的列表,其中我必须显示每家酒店10张图片。我使用了DataList控件。由于我的图像存储在不同的表中,因此我必须使用ItemDataBound事件中的HotelId每次查询图像列表。但每次调用该存储过程时,大约需要6秒才能完成。所以对于100行,它需要100 * 6秒,这是我的代码

protected void dlSearchResult_ItemDataBound(object sender, DataListItemEventArgs e)
    {
        if (ListItemType.Item == e.Item.ItemType || ListItemType.AlternatingItem == e.Item.ItemType)
        {
            HtmlGenericControl ul = (HtmlGenericControl)e.Item.FindControl("ulImages");
            DataSet dsImages = new DataSet();
            string HotelId=dlSearchResult.DataKeys[e.Item.ItemIndex].ToString();
            dsImages = SqlHelper.ExecuteDataset(Connection.ConnectionString, CommandType.StoredProcedure, "GetImage_ByHotelID", new SqlParameter("@HotelId", HotelId));

            StringBuilder  listtext=new StringBuilder ();

            if (dsImages.Tables.Count > 0)
            {
                for (int i = 0; i < dsImages.Tables[0].Rows.Count; i++)
                {
                    listtext.Append("<li class='PX_sri_photos_0'><a href='#'> <img  src='" + dsImages.Tables[0].Rows[i]["URL"].ToString() + "' alt='" + dsImages.Tables[0].Rows[i]["Caption"].ToString() + "' /></a></li>");
                }
            }
            ul.InnerHtml = listtext.ToString();


        }
    }

请指导我优化我的代码

1 个答案:

答案 0 :(得分:0)

为什么不使用datalist控件的基本结果,这是一个表。这样可以避免从头开始构建数据集。通过使用sql数据适配器来填充数据集来替换循环。创建一个表格,其中包含酒店ID与100家酒店中每个酒店的10张图片的id值之间的关系。在查询中加入2个表,结果数据集应该可以缩短在网页中加载图像的等待时间。我不能花时间编写代码,我在Android手机上。希望建议有所帮助。 ADO.Net的工作速度与任何其他.Net数据协议一样快,而且速度更快。