2012-02-19 151 views
3

抱歉令人不安。我试图在asp.net gridview中显示选定的字段。我可以显示除“product_img”之外的所有内容,我应该在gridview中显示相关图片。GridView无法显示图像

问题是在gridview中,当我将图像控件的图像url附加到代码不起作用,因为它给我空图像/断开的图像链接。

是我的方法将dr.read上的路径绑定到gridview中的imageURL错误? 我已经在页面后面编辑了我的代码,并将aspx页面设计为底部。

设计师页面的代码位于下方,向下滚动。谢谢。

protected void gvShowInsert_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     SqlCommand cmd = new SqlCommand("SELECT product_cakeName, product_price,  
     product_qty,product_desc,product_img FROM Tbl_Products", conn); 

     conn.Open(); 

     SqlDataReader dr; 
     dr = cmd.ExecuteReader(); 
     if(dr.Read()) 
     { 
      //Context.Response.BinaryWrite((byte[])dr[dr.GetOrdinal("product_img")]); 


      byte[] path = (byte[])dr["product_img"]; //read the path of image 

     }//imageControl.ImageUrl = path; //set the path to image control 


     gvShowInsert.DataSource = dr; 
     gvShowInsert.DataBind(); 
     dr.Close(); 
     conn.Close(); 
    } 

这是我设计的aspx:

<Columns> 
    <asp:TemplateField HeaderText="cake-name"> 
     <ItemTemplate> 
      <asp:Label ID="lblHeaderName" 
      runat="server"Text='<%#Eval("product_cakeName") %>'></asp:Label>  
     </ItemTemplate> 
    </asp:TemplateField> 
<asp:TemplateField HeaderText="price"> 
    <ItemTemplate> 
    <asp:Label ID="lblHeaderPrice" runat="server" Text='<%#Eval("product_price") 
      %>'></asp:Label>  
    </ItemTemplate> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="qty"> 
<ItemTemplate> 
<asp:Label ID="lblHeaderQty" runat="server" Text='<%#Eval("product_qty") %>'></asp:Label>  
</ItemTemplate> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="desc"> 
<ItemTemplate> 
<asp:Label ID="lblHeaderDesc" runat="server" Text='<%#Eval("product_desc") %>'> 
</asp:Label>  
</ItemTemplate> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="img"> 
<ItemTemplate> 
<asp:Image ID="imageControl" runat="server" ImageUrl='<%#"InsertProd.aspx.cs?path" %>' > 
</asp:Image>  
</ItemTemplate> 
</asp:TemplateField> 
</Columns> 

回答

3

如果你有图片的路径,或者图像文件名,保存在数据库中,为什么不直接分配给它就像你的其他控件做值?就像这样:

如果你的数据库存储的整个路径,这样做:

<asp:Image ID="imageControl" runat="server" ImageUrl='<%# Eval("product_img") %>'></asp:Image> 

如果你的数据库只有文件名,这样做:

<asp:Image ID="imageControl" runat="server" ImageUrl='<%# String.Format("~/path/to/image/" + Eval("product_img")) %>'></asp:Image> 

祝您好运!

+0

图像存储在数据库中,而不是在文件系统 – 2012-02-20 00:59:18

+0

你需要一个处理器,这里指:http://stackoverflow.com/questions/1738020/bytearray-to -image-asp-net – Ricketts 2012-02-20 01:10:35

+0

谢谢你们!这个处理程序对于我来说是太多的信息了。因此,我会尝试直接从DB分配值,如上所示。谢谢大家的帮助,非常感谢:D – jan 2012-02-20 04:45:35

0

您需要一个用于ASP.NET图像服务器控件的URL,因此您必须在另一个请求中提供图像,而ashx处理程序适用于此目的。因此,从初始sql select中删除二进制映像字段,稍后您将获取它。

第一步是使URL格式的图像,希望你在该表中有真正的ID,不只是product_cakeName,这样的事情:

<asp:Image ID="imageControl" runat="server" ImageUrl='ServeImage.ashx?cake=<%#Eval("product_cakeName") %>' > 

然后创建ServeImage.ashx,只选择二进制图像场从数据库的蛋糕请求通过参数“蛋糕”,并提供它(设置Request.OutputStream或使用Request.BinaryWrite)。

下面是一个完整的例子:http://www.shabdar.org/asp-net/81-display-images-in-gridview-from-database-in-aspnet.html

+0

谢谢,虐待尽快处理程序。害怕尝试新事物,否则他们将会被搞砸。欢呼兄弟,并感谢你:D – jan 2012-02-20 04:46:30