2012-02-19 18 views
3

ご迷惑をおかけして申し訳ありません。選択したフィールドをasp.netグリッドビューに表示しようとしています。私は "product_img"以外のすべてを表示することができます。ここでは、関連する画像をgridviewに表示する必要があります。GridViewが画像を表示できません

イメージコントロールの画像URLをコード012-に添付すると、null画像/壊れた画像リンクが表示されるため、問題はgridviewにあります。

は、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

画像は、データベース内ではなく、あなたがここに参照し、ハンドラが必要です –

+0

ファイルシステムに格納されています。http://stackoverflow.com/questions/1738020/bytearray-to -image-asp-net – Ricketts

+0

ありがとうございました!ハンドラは私にはあまりにも多くの情報を試しています。したがって、上記のようにDBから直接値を割り当てることを試みます。助けてくれてありがとう、大いに感謝します:D – jan

0

ASP.NETイメージサーバーコントロールのURLが必要なため、別のリクエストで画像を提供する必要があります。そのため、ashxハンドラが適しています。したがって、最初のSQL Selectからバイナリイメージフィールドを削除すると、後でフェッチされます。ちょうどバイナリイメージフィールドを選択し、

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

そしてServeImage.ashxを作成します。

最初のステップはproduct_cakeName、このようなものだけではなく、あなたがそのテーブルの本当のIDを持っていることを願って、URL形式の画像をレンダリングすることです「ケーキ」を要求されたケーキのデータベースから取得し、それを提供します(Request.OutputStreamを設定するか、またはRequest.BinaryWriteを使用します)。ここで

は完全な例である:http://www.shabdar.org/asp-net/81-display-images-in-gridview-from-database-in-aspnet.html

+0

ありがとう、すぐにハンドラを試してみてください。新しい事を試すことを恐れています。うれしい兄弟、そしてありがとう:D – jan

関連する問題