日期:2014-05-19  浏览次数:20851 次

###详解如何在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( "&lt ",   " < ").Replace( "&gt ",   "> ")
                        }
               
                }


 

                                              &nb