0

我有 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();
      }
4

1 回答 1

0

您的处理程序虽然通过循环运行,但只会返回它遇到的第一个图像。

通过调用这些行......:

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

.....您本质上是在说“好的,您现在可以停下来吐出该图像”-不会到达循环中的其他图像。

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

因此,更改您的处理程序,使其仅提供一个图像,您可以将要显示的图像的 ID 放在查询字符串中,然后从您的 gridview 调用处理程序。

类似的东西(例如,未经测试)

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

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

于 2013-06-05T19:41:37.750 回答