一个很小的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:/ ", " ");
}