3

很抱歉给您添麻烦。我试图在 asp.net gridview 中显示选定的字段。我可以显示除“product_img”之外的所有内容,我应该在 gridview 中显示相关图片。

当我将图像控件的图像 url 附加到代码时,问题出在 gridview 中 -'<%#"InsertProd.aspx.cs?path" %>'因为它给了我空图像/损坏的图像链接,所以它不起作用。

我将 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>
4

2 回答 2

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>

祝你好运!

于 2012-02-20T00:56:32.060 回答
0

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

第一步是渲染 url 表单图像,希望你在那个表中有真实的 ID,而不仅仅是 product_cakeName,像这样:

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

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

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

于 2012-02-20T01:07:58.390 回答