2012-02-19 153 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