本人数据库中的数据有4列,三列数据,一列图片。 本人想在datagridview控件中同时显示,前3列数据,最后一列图片。数据库里的图片是以二进制形式保存的。datagridview控件中显示图片的那列最好是缩略图,然后在图片上添加链接显示原图怎么实现。
解决方案
5
5
还添加链接?又不是从URL获取的网络图片,哪来的链接啊
表格里加个自定义列,格式为image就行了.
表格里加个自定义列,格式为image就行了.
5
5
<asp:GridView ID="d" runat="server" AutoGenerateColumns="False" AutoGenerateColumns="False" DataKeyNames="id" OnRowDataBound="GridView1_RowDataBound">
<Columns>
<asp:BoundField Field="title"/>
<asp:BoundField Field="test"/>
<asp:TemplateField></asp:TemplateField>
</Columns>
</asp:GridView>
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
int id = int.Parse(d.DataKeys[e.Row.RowIndex].Value.ToString());
Image img = d.Rows[e.Row.RowIndex].FindControl("img") as Image;
if (img != null)
{
img.ImageUrl = "test.aspx?id="+id;
}
}
}
test.aspx.cs 加载事件
//根据id读取图片字段
string str = "server=X;database=X;uid=X;pwd=X";
string sql = "select image from ddd where id="+Request["id"];
SqlConnection con = new SqlConnection(str);
con.Open();
SqlCommand cmd = new SqlCommand(sql, con);
SqlDataReader sdr = cmd.ExecuteReader();
if (sdr.HasRows)
{
sdr.Read();
byte[] bytes = (byte[])sdr["pic"];
MemoryStream ms = new MemoryStream(bytes);
Bitmap bmp = new Bitmap(30, 30);//缩略图大小
//百度MemoryStream生成验证码返回图片格式
}
sdr.Close();
con.Close();
不是什么机密图片搞什么二进制 直接存图片地址不就行了
5
页面
<asp:GridView ID="d" runat="server" AutoGenerateColumns="False" DataKeyNames="id" OnRowDataBound="GridView1_RowDataBound"> <Columns> <asp:BoundField DataField="id"/> <asp:BoundField DataField="name"/> <asp:TemplateField> <ItemTemplate> <asp:Image ID="img" runat="server" /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>
5
首先datagridview的列格式是本人随便定义扩展的,你弄个treeview放里面都行。所以,你的问题就很好解决了,你本人扩展一种列出来不就行了,你想里面放个可交互的游戏都行
10
关键就是通过 “test.aspx?id=”+id 这个地址。