我想将二进制图像显示到名为'gvExistedCharacter'的网格视图中.我做过关于它的研究,其中许多建议使用处理程序.但是,我不知道我该怎么做.
仅供参考:数据库中图像的数据类型为image,名为"blueBallImage".我还想在同一个gridview中显示它的int级别.
我试过了
SqlConnection con = new SqlConnection(@"Data Source=localhost;Initial Catalog=MyCloudGames;Integrated Security=True");
SqlCommand cmd = new SqlCommand("Select blueBallImage FROM CorrespondingBall", con);
cmd.CommandType = System.Data.CommandType.Text;
cmd.Connection = con;
SqlParameter ImageID = new SqlParameter("@characterID", System.Data.SqlDbType.Int);
ImageID.Value = context.Request.QueryString["characterID"];
cmd.Parameters.Add(ImageID);
con.Open();
SqlDataReader dReader = cmd.ExecuteReader();
dReader.Read();
context.Response.BinaryWrite((byte[])dReader["Image"]);
dReader.Close();
con.Close();
Run Code Online (Sandbox Code Playgroud)
我收到错误"参数化查询"(@characterID int)选择blueBallImage FROM CorrespondingBall'需要参数'@characterID',这是未提供的."
您可以使用处理程序在gridview中显示图像,您的html标记看起来像在里面
Gridview ItemTemplate 将图像控制src设置为 src=~/ShowImage.ashx?id=" + id
ShowImage.ashx你的处理程序在哪里返回MemoryStream((byte [])img);
这里我的一篇类似的文章如何获取二进制数据并显示为图像
博客文章:将二进制数据转换为图像,从二进制数据保存和检索图像asp.net c#
在你的情况下你的查询字符串是 characterID
所以你的图像是src src=~/ShowImage.ashx?id=" + characterID
更新答案:
Html标记:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField HeaderText="CharacterID">
<ItemTemplate>
<asp:Label ID="lblid" runat="server" Text='<%# Bind("characterID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="GameLevel">
<ItemTemplate>
<asp:Label ID="lblglevel" runat="server" Text='<%# Bind("gameLevel") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Image">
<ItemTemplate>
<asp:Image ID="Image1" runat="server" ImageUrl='<%#"ShowImage.ashx?getID="+Eval("characterID") %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Run Code Online (Sandbox Code Playgroud)
代码背后:
protected void Page_Load(object sender, EventArgs e)
{
DataTable dt = getData();
GridView1.DataSource = dt;
GridView1.DataBind();
}
public DataTable getData()
{
SqlDataAdapter dap = new SqlDataAdapter("select characterID,blueBallImage,gameLevel from CorrespondingBall", cn);
DataSet ds = new DataSet();
dap.Fill(ds);
return ds.Tables[0];
}
Run Code Online (Sandbox Code Playgroud)
通用处理程序:在这里添加新的通用处理程序showIamges.ashx是我的通用处理程序
public void ProcessRequest(HttpContext context)
{
Int32 my_Id;
if (context.Request.QueryString["getID"] != null)
{
my_Id = Convert.ToInt32(context.Request.QueryString["getID"]);
context.Response.ContentType = "image/jpeg";
Stream strm = ShowEmpImage(my_Id);
byte[] buffer = new byte[4096];
int byteSeq = strm.Read(buffer, 0, 4096);
while (byteSeq > 0)
{
context.Response.OutputStream.Write(buffer, 0, byteSeq);
byteSeq = strm.Read(buffer, 0, 4096);
}
}
}
public Stream ShowEmpImage(int my_Id)
{
string conn = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
SqlConnection connection = new SqlConnection(conn);
string sql = "select blueBallImage from CorrespondingBall WHERE characterID = @ID";
SqlCommand cmd = new SqlCommand(sql, connection);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@ID", my_Id);
connection.Open();
object img = cmd.ExecuteScalar();
return new MemoryStream((byte[])img);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25689 次 |
| 最近记录: |