日期:2014-05-18  浏览次数:20498 次

一个很小的DATALIST问题
我在DATALIST的模板里面加了一个IMAGE控件,用来显示图片,数据库中的路径字段跟IMAGEURL属性绑定,但是现在遇到问题了,因为路径字段都多了一个以c:/,要发布到服务器上有C这个路径肯定不行了,所以就用空格代替他,这个方法我写在了dataList1_ItemCreated事件中,我用了一个FOR循环,代码如下
<asp:Image   ID= "ShowPhoto "   ImageUrl= ' <%#Eval( "Photo ")%> '     runat= "server "   />
           
                          for   (int   i   =   0;   i   <   DataList1.Items.Count;   i++)
                {
                  Image   image   =   (Image)DataList1.Items[i].FindControl( "ShowPhoto ");
                        image.ImageUrl   =   image.ImageUrl.Replace( "c:/ ", "   ");
                }
我用的是PAGEDDATASOURCE来分页,我遇到的问题是当我把PAGESIZE设置为4时,dataList1_ItemCreated事件中代码就只执行三次,而不执行4次,于是最后一条在页面上显示的记录的路径中还有c:/而前面的则都替换了,而当PAGESIZE改为2时则只有第一条被替换,为什么这个循环少执行了一次呢,哎,打的有点乱,望大家指教。

------解决方案--------------------
将 dataList1_ItemCreated 事件 改成 dataList1_ItemDataBound 事件处理

protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.SelectedItem ||
e.Item.ItemType == ListItemType.AlternatingItem ||
e.Item.ItemType == ListItemType.EditItem)
{
Image image = (Image)row.FindControl( "ShowPhoto ") as Image;
image.ImageUrl = image.ImageUrl.Replace( "c:/ ", " ");
}

}
------解决方案--------------------
何必这么麻烦呢?这样就可以了
<asp:Image ID= "ShowPhoto " ImageUrl= ' <%# Eval( "Photo ").ToString().Replace( "c:/ ", " ") %> ' runat= "server " />
------解决方案--------------------
JGood(他山之石,可以攻玉) ( ) 信誉:100 2007-09-26 15:12:22 得分: 0


何必这么麻烦呢?这样就可以了
<asp:Image ID= "ShowPhoto " ImageUrl= ' <%# Eval( "Photo ").ToString().Replace( "c:/ ", " ") %> ' runat= "server " />


这个可以

------解决方案--------------------
dataList1_ItemCreated里边不需要写for循环吧?
每个item的时候都要执行一次dataList1_ItemCreated

直接
protected void DataList1_ItemCreated(object sender, DataListItemEventArgs e)
{
Image image = (Image)e.Item.FindControl( "ShowPhoto ");
image.ImageUrl = image.ImageUrl.Replace( "c:/ ", " ");
}