How to display binary images into a gridview in ASP.NET using C#?

后端 未结 2 638
别那么骄傲
别那么骄傲 2020-12-01 23:06

I want to display binary images into a gridview named \'gvExistedCharacter\'. I did research about it and many of them suggested to use a handler. However, I have no idea ho

相关标签:
2条回答
  • 2020-12-01 23:21

    You want to add @characterID parameter to your sql command but your command doesn't have a parameter called @characterID.

    Remove your parameter process in your code or add @characterID in your sql command which try to match.

    0 讨论(0)
  • 2020-12-01 23:24

    You can use handler to display image in gridview , your html markup look like inside

    Gridview ItemTemplate set image control src as src=~/ShowImage.ashx?id=" + id

    where ShowImage.ashx is your handler which return MemoryStream((byte[])img);

    Here my one similar article how to get binary data and display as image

    Blog Article: Convert Binary data to image, Save and retrieve image from binary data asp.net c#

    In your case your querystring is characterID

    so your image src would be src=~/ShowImage.ashx?id=" + characterID


    Updated Answer:

    Html Markup:

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
        <Columns>
            <asp:TemplateField HeaderText="CharacterID">
                <ItemTemplate>
                    <asp:Label ID="lblid" runat="server" Text='<%# Bind("characterID") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="GameLevel">
                <ItemTemplate>
                    <asp:Label ID="lblglevel" runat="server" Text='<%# Bind("gameLevel") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Image">
                <ItemTemplate>
                    <asp:Image ID="Image1" runat="server" ImageUrl='<%#"ShowImage.ashx?getID="+Eval("characterID") %>' />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
    

    Code behind:

    protected void Page_Load(object sender, EventArgs e)
    {        
        DataTable dt = getData();
        GridView1.DataSource = dt;
        GridView1.DataBind();
      }
    
    public  DataTable getData() 
    {
      SqlDataAdapter dap = new SqlDataAdapter("select characterID,blueBallImage,gameLevel from CorrespondingBall", cn);
      DataSet ds = new DataSet();
      dap.Fill(ds);
      return ds.Tables[0];
    }
    

    Generic handler: Add new generic handler here showIamges.ashx is my generic handler

    public void ProcessRequest(HttpContext context)
     {
        Int32 my_Id;
        if (context.Request.QueryString["getID"] != null)
        {
           my_Id = Convert.ToInt32(context.Request.QueryString["getID"]);
           context.Response.ContentType = "image/jpeg";
           Stream strm = ShowEmpImage(my_Id);
           byte[] buffer = new byte[4096];
           int byteSeq = strm.Read(buffer, 0, 4096);
           while (byteSeq > 0)
            {
               context.Response.OutputStream.Write(buffer, 0, byteSeq);
               byteSeq = strm.Read(buffer, 0, 4096);
            }
          }
    }
    
    public Stream ShowEmpImage(int my_Id)
    {
       string conn = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
       SqlConnection connection = new SqlConnection(conn);
       string sql = "select blueBallImage from CorrespondingBall WHERE characterID = @ID";
       SqlCommand cmd = new SqlCommand(sql, connection);
       cmd.CommandType = CommandType.Text;
       cmd.Parameters.AddWithValue("@ID", my_Id);
       connection.Open();
       object img = cmd.ExecuteScalar();
       return new MemoryStream((byte[])img);
     }
    
    0 讨论(0)
提交回复
热议问题