我的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(">", ">")
}
}
小皮鞋 2007.5.9
4 个解决方案
#1
sf
#2
教学贴 支持!
#3
谢谢
#4
非常感谢!
#1
sf
#2
教学贴 支持!
#3
谢谢
#4
非常感谢!