从SQL中显示gridview中的图像列表

时间:2015-03-01 20:03:20

标签: asp.net vb.net gridview sql-server-2012

使用VS2013(asp.net,VB)和SQL Server 2012。

我的数据库中有一个表,其中包含IDNameProfilePic列。 ProfilePic的类型为image

我想在gridview中显示所有图像的列表。看谷歌我只能找到有人根据ID选择图像的例子,这不是我想要的。

这是我的imageHandler.ashx

<%@ WebHandler Language="VB" Class="profilePICHandler" %>

Imports System
Imports System.Web
Imports System.Data.SqlClient

Public Class profilePICHandler : Implements IHttpHandler

Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
    Dim con As New SqlConnection()
    con.ConnectionString = ConfigurationManager.ConnectionStrings("nefsaConnectionString").ConnectionString

    ' Create SQL Command  

    Dim cmd As New SqlCommand()
    cmd.CommandText = "select * from ProfilePics"
    cmd.CommandType = System.Data.CommandType.Text
    cmd.Connection = con
    con.Open()
    Dim dReader As SqlDataReader = cmd.ExecuteReader()
    dReader.Read()
    context.Response.BinaryWrite(DirectCast(dReader("profilepic"), Byte()))
    dReader.Close()
    con.Close()
End Sub

Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
    Get
        Return False
    End Get
End Property

End Class

在我的aspx页面上,我有这个

<asp:GridView ID="gridSelectAPic" runat="server" 
              AutoGenerateColumns="false">
    <Columns>
        <asp:TemplateField HeaderText="Image">
            <ItemTemplate>
                <asp:Image runat="server" 
                     ImageUrl='<%# "ProfilePICHandler.ashx"%>' 
                     ID="profilePIC" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

关于背后的代码我有这个

Dim dt As New DataTable
Dim conn As New SqlConnection(ConnectionString)

Using conn
        Dim ad As New SqlDataAdapter("Select * from ProfilePics", conn)
        ad.Fill(dt)
End Using

gridSelectAPic.DataSource = dt
gridSelectAPic.DataBind()

我有点不知所措,所以任何帮助都非常感激

1 个答案:

答案 0 :(得分:0)

因为你的处理程序实现错误。您需要一个查询字符串来告诉处理程序您必须检索哪个图像。

您可以使用asp:ImageField以简洁和可读性。标记

<asp:ImageField HeaderText="Image" 
    DataImageUrlField="EmployeeID" 
    DataImageUrlFormatString="ProfilePICHandler.ashx?id={0}" />

<asp:TemplateField HeaderText="Image">
    <ItemTemplate>
        <asp:Image runat="server" 
                ImageUrl='<%# Eval("EmployeeID", "ProfilePICHandler.ashx?id={0}")%>' 
                ID="profilePIC" />
    </ItemTemplate>
</asp:TemplateField> 

现在从通用处理程序中获取查询字符串,如此

Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
    Dim con As New SqlConnection()
    con.ConnectionString = ConfigurationManager.ConnectionStrings("nefsaConnectionString").ConnectionString

    Dim cmd As New SqlCommand()
    cmd.CommandText = String.Format("select profilepic from ProfilePics where EmployeeID=", context.Request.QueryString("id"))
    cmd.CommandType = System.Data.CommandType.Text
    cmd.Connection = con
    con.Open()
    Dim dReader As SqlDataReader = cmd.ExecuteReader()
    dReader.Read()
    context.Response.BinaryWrite(DirectCast(dReader("profilepic"), Byte()))
    dReader.Close()
    con.Close()
End Sub

请注意

  1. 我在DB
  2. 中为您的PK命名了EmployeeID
  3. 您的处理程序名称在Eval和CamelCased的Pascalcased实现。这是一个错字吗?
  4. Haven为了简洁而参数化了查询。