###详解如何在GridView中显示图片或链接(当不能确定哪一列中含有图片或链接时)###
最近在网上看到很多人提问如上问题,现把个人解决及分析发布,希望能对大家有所帮助,同时也为自己很久不上CSDN做个弥补.如果你有更好的方案,可以共同学习探讨.
我的BLOG详解原文地址:http://www.xiaopixie.com/web/news.aspx?id=213
相信大家一定很头痛,当用一个DATATABLE来绑定GRIDVIEW时,而我们又不确定DATATABLE的哪一列中含有图片或链接.我们存在DATATABLE中的 " <img src=abc.jpg> "或 " <a href=eee.aspx> ddd </a> "就会被无情的原样显示.
首先让我们剖析一下GRIDVIEW这个控件,大家都知道GRIDVIEW先承载绑定的数据,然后才进行解析.
也就是说GRIDVIEW装完数据后和数据一起解析为 <table> <tr> <td> </td> </tr> </table> 格式的HTML代码,然后显示出来.在这个解析过程中 " < "会扰乱它自身转化为 <table> 格式的解析流程.所以它会先把承载数据中的 " < "进行编码,以防止它的干扰,然后对自身进行HTML的TABLE格式转换.
不过GRIDVIEW比较懒惰,自身解析完后,它却没有对 " < "进行还原.所以这个后续部分只有我们自己来做.
现在进入正题,首先让我们建一个DATATABLE:
DataTable dt = new DataTable()
dt.Columns.Add( "小皮鞋链接 ")
dt.Columns.Add( "小皮鞋图片 ")
dt.Columns.Add( "小皮鞋数据库图片 ")
DataRow dr = dt.NewRow()
dr[0] = " <a href=http://www.xiaopixie.com> 站点 </a> "
dr[1] = " <img src =http://www.xiaopixie.com/img/xiaopixie.jpg> "
dr[2] = " <img src=photo.aspx?id=1> " //photo.aspx负责提取数据库中的图片然后用二进制输出,这里不再详述
dt.Rows.Add(dr)
然后进行绑定:
this.GridView1.DataSource = dt
this.GridView1.DataBind()
//下面是最重要的部分.或许有人会在这里问,这样做会影响效率吗?个人认为是不会的.因为你不可能在GRIDVIEW里装超过一千条数据,多了你会分页处理.所以分页中每页超过一千条数据,几呼不可能.
//现在让我们来完成GRIDVIW没有完成的工作
foreach (GridViewRow rw in this.GridView1.Rows)
{
for (int i = 0 i < rw.Cells.Count i++)
{
rw.Cells[i].Text = rw.Cells[i].Text.Replace( "< ", " < ").Replace( "> ", "> ")
}
}
&nb