zoukankan      html  css  js  c++  java
  • 使用Gridview绑定数据库中的图片

    注:此系列记录在我实际开发中遇到的问题和收藏一些技巧文章。

    我们都知道,在Gridview中不能直接去绑定数据库中的图片,我们可以利用HttpHandler很容易的完成这个任务,在这里我记录一下这个过程。

    1.上传图片存储到数据库中

    在数据库中创建一个表,添加一下3个字段:

    创建一个表

    步骤一:在Web页面中拖一个FileUpload 控件,一个文本框用于输入名称和提交上传按钮

    <asp:FileUpload ID="fuImage" runat="server" /><br />
    <asp:TextBox ID="txtImageName" runat="server"/><br />
    <asp:Button ID="btnUpload" runat="server" 
    OnClick="btnUpload_Click" Text="Upload" />

    步骤二:在Web.Config文件内配置连接字符串。

    <add name="ConnectionString" connectionString="Data Source=.\SQLEXPRESS;
    AttachDbFilename=|DataDirectory|\Image.mdf;Integrated Security=True;
    User Instance=True" providerName="System.Data.SqlClient"/>

    步骤三:把下面的代码复制到上传按钮事件中。

    protected void btnUpload_Click(object sender, EventArgs e)
    {
        Stream imgStream = fuImage.PostedFile.InputStream;
        int imgLen = fuImage.PostedFile.ContentLength;
        string imgName = txtImageName.Text;
        byte[] imgBinaryData = new byte[imgLen];
        int n = imgStream.Read(imgBinaryData,0,imgLen);
    
        //use the web.config to store the connection string
        SqlConnection connection = new SqlConnection(ConfigurationManager.
        ConnectionStrings["connectionString"].ConnectionString);
        SqlCommand command = new SqlCommand(
         "INSERT INTO Image (imagename,image)
         VALUES ( @img_name, @img_data)", connection);
    
        SqlParameter param0 = new SqlParameter(
         "@img_name",SqlDbType.VarChar, 50);
        param0.Value = imgName;
        command.Parameters.Add(param0);
    
        SqlParameter param1 = new SqlParameter(
         "@img_data", SqlDbType.Image);
        param1.Value = imgBinaryData;
        command.Parameters.Add(param1);
    
        connection.Open();
        int numRowsAffected = command.ExecuteNonQuery();
        connection.Close();
    }

    2.利用HttpHandler从数据库中读取图片

    创建一个名为ImageHandler.ashx的HttpHandler从数据库中读取图片,通过imageID这个参数调用其方法显示图片。像这样:ImageHandler.ashx?ImID=200

    步骤四:书写ImageHandler.ashx文件代码如下:

    public class ImageHandler : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            string imageid = context.Request.QueryString["ImID"];
            SqlConnection connection =
                 new SqlConnection(ConfigurationManager.
                ConnectionStrings["connectionString"].ConnectionString);
            connection.Open();
            SqlCommand command = new SqlCommand(
                "select Image from Image where ImageID=" + imageid,
                 connection);
            SqlDataReader dr = command.ExecuteReader();
            dr.Read();
            context.Response.BinaryWrite((Byte[])dr[0]);
            connection.Close();
            context.Response.End();
        }
    
        public bool IsReusable
        {
            get{return false;}
        }
    }

    3.绑定Gridview控件

    步骤五:拖一个Gridview控件到页面上,并将其命名为gvImages。用下面代码来绑定数据。

    SqlConnection connection = new SqlConnection(ConfigurationManager.
    ConnectionStrings["connectionString"].ConnectionString);
    SqlCommand command = new SqlCommand("SELECT imagename,ImageID
    from [Image]", connection);
    SqlDataAdapter ada = new SqlDataAdapter(command);       
    DataTable dt = new DataTable();
    ada.Fill(dt);
    gvImages.DataSource = dt;
    gvImages.DataBind();

    步骤六:设置Gridview控件的绑定列,其HTML代码如下:

    <asp:GridView Width="500px" ID="gvImages" runat="server" 
                   AutoGenerateColumns="False" >
        <Columns>
            <asp:BoundField HeaderText = "Image Name" 
                             DataField="imagename" />
            <asp:TemplateField HeaderText="Image"> 
             <ItemTemplate> 
                <asp:Image ID="Image1" runat="server" 
                ImageUrl='<%# "ImageHandler.ashx?ImID="+ Eval("ImageID")
                           %>'/> 
             </ItemTemplate>
        </asp:TemplateField>
        </Columns>
    </asp:GridView>

    4.上传图片,并显示

    显示通过!

    OK!测试通过!还有其它一些显示图片的方法。但是我认为这个比较简单

  • 相关阅读:
    几个华为5300交换机故障的意思和可能产生的原因
    怎么让win7右下角只显示时间不显示日期 ?(可行)
    Linux下LDAP统一认证解决方案
    教你如何禁用U盘、屏蔽USB端口的三种方法
    开机自动启动一个新建文件夹
    端口
    输//ip提示找不到应用程序
    java单向加密算法小结(2)--MD5哈希算法
    java单向加密算法小结(1)--Base64算法
    Git初探--笔记整理和Git命令详解
  • 原文地址:https://www.cnblogs.com/soundcode/p/2039930.html
Copyright © 2011-2022 走看看