如何从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();
}
处理程序虽然在循环中运行,但只会返回遇到的第一张图像。
调用这些行....:
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()
它。