前几天发帖求助过该问题,虽经几位大侠指教,但一直无法解决。思量之下,可能是我的问题没有说清除所致。故再次发帖求助。小弟所做工作如下:数据库中有一个表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分表示感谢
现在遇到的问题如下:小弟一条记录有时会同时上传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分表示感谢
如果有图片则加入<image src=""></image>否则不加
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>楼主下面的方法理论上没问题,就是这样控制他隐藏,至于为什么没结果,建议楼主多设断点调试下
<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;
}
}
测试可以实现楼主功能
无论您的回答是否成功解决我的问题,都付出了辛勤的劳动。
最终使用“liubin911”的方法解决了问题,再次对您表示感谢。最终我将赠送的分值如下:
liubin911 60分;GT7466 20分;luoruogao 20分。多谢大家帮忙!
马上去结贴。