Datalist绑定图片的问题,简单

w87875251l 2010-09-08 11:04:47
从后台添加图片,添加了好几个,但是浏览时datalist控件只重复显示一个,很是郁闷,不知道问题出在哪里,帮帮忙啊,贴代码:
<asp:DataList ID="DataList1" runat="server" OnItemDataBound="DataList1_ItemDataBound" >
<ItemTemplate>
<table width="120" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="92" align="center">
<a href="product_view.aspx?productID=<%# DataBinder.Eval(Container.DataItem,"productID") %>">
<asp:Image ID="productImg" runat="server" Height="88px" Width="108px" ImageUrl='<%# DataBinder.Eval(Container.DataItem,"productSmallImg") %>' />


</a>
</td>
</tr>
<tr>
<td align="center" style="height: 18px"><%# DataBinder.Eval(Container.DataItem,"productName") %></td>
</tr>

</table>
</ItemTemplate>
</asp:DataList>

后台: private void BindProductMsg()
{
IProduct product = new Product();
DataList1.DataSource = product.GetProductAdminMsg();
DataList1.DataBind();
}
protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
{
IProduct product = new Product();
OleDbDataReader dr = product.GetProductAdminMsg();
Image image = (Image)e.Item.FindControl("productImg");
if (dr.Read())
{
if (dr["productImg"].ToString() == "")
{
image.ImageUrl = @"~/image/upImage/Default.jpg";
}
else
{
image.ImageUrl = @"~/image/upImage/" + dr["productImg"];
}
}

}

类: public OleDbDataReader GetProductAdminMsg()
{
OleDbConnection conn = db.CreateConnection();
string sql = "select top 3 * from Product where productFlag=true";
OleDbCommand cmd = new OleDbCommand(sql,conn);

OleDbDataReader dr = null;
try
{
conn.Open();
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (OleDbException ex)
{
throw new Exception(ex.Message, ex);
}
return dr;
}
...全文
269 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
yueying5235 2010-09-08
  • 打赏
  • 举报
回复
为啥不用DT绑定呢
DR只能读出一条数据
孟子E章 2010-09-08
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 w87875251l 的回复:]

感谢孟子,解决,但是弄不懂啥意思,我百度一下
[/Quote]

你数据源DataList1.DataSource = product.GetProductAdminMsg();已经取出来了,你绑定的时候再取就重复了,并且你只Read一个,只有第一条才显示。
wyq29 2010-09-08
  • 打赏
  • 举报
回复
看错了

是你每一行都绑定了 第一条记录!

while 也不对 最后绑定最后一条记录

必须获取当前行的数据

w87875251l 2010-09-08
  • 打赏
  • 举报
回复
或者解释一下,也可以哈
wyq29 2010-09-08
  • 打赏
  • 举报
回复
ItemDataBound 事件是每一行都要执行的!! 不是一次执行完!

你在这个事件里 每次都获取一个 DataReader 并且又循环 最后赋值的肯定都是最后一条记录!!

相当于每一行的值都是最后一条记录


protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==ListItemType.AlternatingItem)
{
DataRowView drv = (DataRowView)e.Item.DataItem;
Image image = (Image)e.Item.FindControl("productImg");

if (drv["productImg"].ToString() == "")
{
image.ImageUrl = @"~/image/upImage/Default.jpg";
}
else
{
image.ImageUrl = @"~/image/upImage/" + dr["productImg"];
}
}
}

w87875251l 2010-09-08
  • 打赏
  • 举报
回复
然后再给分哈
w87875251l 2010-09-08
  • 打赏
  • 举报
回复
感谢孟子,解决,但是弄不懂啥意思,我百度一下
root_lee 2010-09-08
  • 打赏
  • 举报
回复
感觉问题好像是出在这里:
private void BindProductMsg()
{
IProduct product = new Product();
DataList1.DataSource = product.GetProductAdminMsg();
DataList1.DataBind();
}
DataList1.DataSource = product.GetProductAdminMsg();
DataSource 为DataReader对象,所以只有一条数据
孟子E章 2010-09-08
  • 打赏
  • 举报
回复
这样写
protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
Image image = (Image)e.Item.FindControl("productImg");

System.Data.Common.DbDataRecord d = e.Item.DataItem as System.Data.Common.DbDataRecord;
if (d["productImg"] == DBNull.Value)
{
image.ImageUrl = "~/image/upImage/Default.jpg";
}
else
{
image.ImageUrl = "~/image/upImage/" + dr["productImg"].ToString();
}
}
}
w87875251l 2010-09-08
  • 打赏
  • 举报
回复
我试试孟子的哈
w87875251l 2010-09-08
  • 打赏
  • 举报
回复
换成while就换成数据库里另一个图片,但是还是只是一个图片,没有不同的图片
孟子E章 2010-09-08
  • 打赏
  • 举报
回复
你判断有问题啊
if (dr.Read())只读取了第一条啊
孟子E章 2010-09-08
  • 打赏
  • 举报
回复
protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType== ListItemType.Item){

Image image = (Image)e.Item.FindControl("productImg");
image
}
}
root_lee 2010-09-08
  • 打赏
  • 举报
回复
if (dr.Read())改成while(dr.Read())试试
w87875251l 2010-09-08
  • 打赏
  • 举报
回复
在线等
w87875251l 2010-09-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ylx1989 的回复:]
显示一条数据就对了,你就读出来了一条数据!
[/Quote]

请具体指教?
ylx1989 2010-09-08
  • 打赏
  • 举报
回复
显示一条数据就对了,你就读出来了一条数据!
w87875251l 2010-09-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 net_lover 的回复:]
你判断的问题

if(e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType== ListItemType.Item)

应该注意
[/Quote]
什么意思?
孟子E章 2010-09-08
  • 打赏
  • 举报
回复
你判断的问题

if(e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType== ListItemType.Item)

应该注意
孟子E章 2010-09-08
  • 打赏
  • 举报
回复
首先,你绑定之前,先检查数据条目是否准确
加载更多回复(5)

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧