如何从sql表中显示gridview中的多行图像

本文关键字:图像 gridview 显示 sql | 更新日期: 2023-09-27 18:17:00

我有asp.net Gridview控件,其中我将显示两列一个是文本字段,另一个是图像字段。网格应该是可扩展的,应该显示所有的图像。当我运行页面的所有行图像显示相同的一个。如何解决这个问题?

![网格视图结果][1]

我使用了Imagehandler文件

     SqlConnection conn = new SqlConnection(connString);
     string sqlsts = "SELECT us.name, us.image from userdetails as us where us.user_id in (select user_id from user_team where team_id  in (select team_id from teaminfo where teamname='" + team + "'))";
     SqlCommand command = new SqlCommand(sqlsts, conn);
     conn.Open();
     DataTable dtst = new DataTable();
     SqlDataAdapter adp = new SqlDataAdapter(sqlsts, conn);
     adp.Fill(dtst);
     int roc = dtst.Rows.Count;
     int coc = dtst.Columns.Count;
     for (int i = 0; i < roc; i++)
     {
         Byte[] imageData = (Byte[])dtst.Rows[i]["image"];
         context.Response.BinaryWrite((Byte[])dtst.Rows[i]["image"]);
         context.Response.ContentType = "image/jpeg";
         context.Response.End();
      }

如何从sql表中显示gridview中的多行图像

处理程序虽然在循环中运行,但只会返回遇到的第一张图像。

调用这些行....:

     context.Response.BinaryWrite((Byte[])dtst.Rows[i]["image"]);
     context.Response.ContentType = "image/jpeg";
     context.Response.End();

…你实际上是在说"好了,你现在可以停下来,吐出那张图片了"——你在循环中的其他图片就不会出现了。

你的处理程序实际上应该只返回一个图像。

所以改变你的处理程序,所以它只提供一个图像,你可以把你想要显示的图像的ID在querystring中,然后从你的gridview调用处理程序。

类似于(示例,未测试)

  <asp:TemplateField  HeaderText="MyImage">
     <ItemTemplate>
        <asp:Image runat="server" ImageURL='<%# Eval("imageID", "myHandler.ashx?id={0}") %>' />
     </ItemTemplate>
  </asp:TemplateField>

您的处理程序现在可以获得id查询字符串,从数据库中选择合适的图像,然后Response.BinaryWrite()它。