GridView не может отобразить изображение - PullRequest
3 голосов
/ 20 февраля 2012

Извините за беспокойство.Я пытаюсь отобразить выбранные поля в виде сетки asp.net.Я могу отобразить все, кроме «product_img», где я должен отображать соответствующую картинку в виде сетки.

Проблема в gridview, когда я прикрепил URL-адрес изображения элемента управления изображением к коду - '<%#"InsertProd.aspx.cs?path" %>' не работает, так как он дает мне нулевые изображения / ссылку на битое изображение

мой метод привязки пути при dr.read к imageURL в gridview неправильный ??я отредактировал свой код за страницей, как показано ниже, и дизайн страницы 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>

Ответы [ 2 ]

3 голосов
/ 20 февраля 2012

Если у вас есть путь к изображению или имя файла изображения, сохраненные в базе данных, почему бы просто не присвоить его, как вы делаете значения для других элементов управления?Например:

Если в вашей базе данных хранится полный путь, сделайте следующее:

<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 голосов
/ 20 февраля 2012

Вам нужен URL-адрес для управления сервером изображений ASP.NET, поэтому вы должны обслуживать изображение в другом запросе, для этого подходит обработчик ashx.Так что удалите двоичное поле изображения из начального выбора SQL, вы получите его позже.

Первый шаг - визуализация изображения формы URL, надеюсь, что у вас есть реальный идентификатор в этой таблице, а не просто 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

...