前几天发帖求助过该问题,虽经几位大侠指教,但一直无法解决。思量之下,可能是我的问题没有说清除所致。故再次发帖求助。小弟所做工作如下:数据库中有一个表TEST,表中字段分别为ID和IMAGE1和IMAGE2,字段类型分别为int ,vchar和vchar。使用时管理员从后台提交图片到upload文件夹中,同时将图片名称存放到IMAGE1和IMAGE2字段中。前台通过datalist控件绑定image控件显示图片供用户浏览。 
    现在遇到的问题如下:小弟一条记录有时会同时上传2个图片,有时只上传1个图片。2个图片时前台显示的时候是没有问题的,但是只上传一张图片时就会遇到如下问题,也就是一张图片显示,但是另外一个图片控件由于无图片显示就会显示一个红色的叉号,十分刺目。 
    我知道用户可以上传一张默认图片代替,但由于一定原因,领导不允许这样,因为以后还可能会有同时上传数十张图片的情况,再全部上传默认图片就不合适。 
    因此想请教各位大侠,不知哪位能够根据图片框中是否含有图片来动态控制Image控件的可见性。 
    datalist前台显示代码如下:
<asp:DataList ID="DataList1" runat="server" DataKeyField="HaiChongMingCheng" DataSourceID="SqlDataSourceChongLuan">
               <ItemTemplate>
                    <asp:Image ID="Image1" runat="server" ImageUrl='<%# Eval("Luan1","~/害虫图片/{0}") %>'/> 
                                    
                     <asp:Image ID="Image2" runat="server" ImageUrl=' <%#Eval("Luan2","~/害虫图片/{0}")%>'/>
                                                                       
               </ItemTemplate>
 </asp:DataList>。    这种情况下若数据库内存有图片路径则显示,若无图片路径则显示一红色叉号。    后经高手点拨,将代码修改如下:
    1.前台不动,后台加入如下代码:
         private void DataList1_ItemCreated(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            System.Web.UI.WebControls.Image img1 = (System.Web.UI.WebControls.Image)e.Item.FindControl("Image1");
            if (img1.ImageUrl.Equals(""))
            {
                img1.Visible = false;
            }
            else
            {
                img1.Visible = true;
            }
        }
    }                未果,无效。
  
   2. 后台无代码,将前台显示代码修改如下:
   <asp:image ID="Image1" runat="server" ImageUrl=' <%#Eval("Luan1")' Visible=' <%#Eval("Luan1")==DbNull.Value?true:false%>'/>
   <asp:image ID="Image1" runat="server" ImageUrl=' <%#Eval("Luan2")' Visible=' <%#Eval("Luan2")==DbNull.Value?true:false%>'/>
  未果,无效。
   3. 后台无代码,前台显示代码修改如下
<asp:image id="image1" runat="server" ImageUrl=' <%# Eval("Luan1")%>' Visible=' <%# Eval("Luan1")!=System.DBNull.Value %>' />
    同样未果。
    还请各位高手指点。无以为报,100分表示感谢
 

解决方案 »

  1.   

    DataList1_ItemDataBound来做。。肯定OK的啦。。
      

  2.   

    1:你可以在数据绑定的事件中加入判断代码来设置是否显示图片,而不是用直接在模板中将图片绑定进去,
    如果有图片则加入<image src=""></image>否则不加
      

  3.   

    没必要上传个新的,做一个同等尺寸的图片,上面就4个字 暂无图片 ,客户不上传哪张图片时,那个字段就为空绑定时<script language="c#" runat="server">   
     public   string   CutStr(object   str){   
              string   strTmp=str.ToString();             if(strTmp==""){   
                      return   "~/图片文件/暂无图片.jpg" ;//文件夹和图片最好起英文名
              }   
              else{   
                      return   "~/害虫图片/"+strTmp;   
              }   
      }   
      
     
    </script>
    <asp:DataList ID="DataList1" runat="server" DataKeyField="HaiChongMingCheng" DataSourceID="SqlDataSourceChongLuan"> 
                  <ItemTemplate> 
                        <asp:Image ID="Image1" runat="server" ImageUrl=' <%# CutStr(Eval("Luan1"))%>'/> 
                                        
                        <asp:Image ID="Image2" runat="server" ImageUrl=' <%# CutStr(Eval("Luan2"))%>'/> 
                                                                          
                  </ItemTemplate> 
    </asp:DataList>楼主下面的方法理论上没问题,就是这样控制他隐藏,至于为什么没结果,建议楼主多设断点调试下
      

  4.   

            <asp:DataList ID="DataList1" runat="server" OnItemDataBound="DataList1_ItemDataBound">
            <ItemTemplate>
                <asp:Image ID="Image1" runat="server" ImageUrl=<%# DataBinder.Eval(Container.DataItem, "img")%>/>
                <asp:Image ID="Image2" runat="server" ImageUrl=<%# DataBinder.Eval(Container.DataItem, "img")%>/>
            </ItemTemplate>
            </asp:DataList>//测试了下
        protected void Page_Load(object sender, EventArgs e)
        {
            this.DataList1.DataSource = db.ExecuteDataset("SELECT img FROM MultiClient").Tables[0].DefaultView;
            this.DataList1.DataBind();
        }    protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                ((Image)e.Item.FindControl("Image1")).Visible = ((Image)e.Item.FindControl("Image1")).ImageUrl.Length < 1 ? false : true;
            }
        }
      

  5.   

    <asp:image ID="Image2" runat="server" ImageUrl='<%#Eval("Luan1")' Visible='<%#Eval("Luan1").ToString()!=""%>'/> 
    测试可以实现楼主功能
      

  6.   

    问题已经得到解决,非常感谢大家的帮助。
    无论您的回答是否成功解决我的问题,都付出了辛勤的劳动。
    最终使用“liubin911”的方法解决了问题,再次对您表示感谢。最终我将赠送的分值如下:
    liubin911 60分;GT7466 20分;luoruogao 20分。多谢大家帮忙!
    马上去结贴。