2012-02-20 59 views
1

我正在创建购物网站。我有一个绑定到管理任务的objectdatasource控件的gridview。这个网格负责在sql server数据库中显示items表。每个项目也可能或可能没有图片。所以当这个网格显示给管理员时,我想要为每一行提供相关图像的小缩略图。这里是GridView控件代码:如何在gridview行中显示图片而不将其保存到硬盘驱动器?

<asp:GridView ID="gridview1" runat="server" 
    DataSourceID="objDataSource" DataKeyNames="item_id"> 
    <Columns> 
     <asp:BoundField DataField="item_category" Visible="false" /> 
     <asp:BoundField HtmlEncode="true" DataField="item_name" 
      HeaderText="Item Name" /> 
     <asp:BoundField HtmlEncode="true" NullDisplayText="Not Set" 
      DataField="item_desc" HeaderText="Item Description" /> 
     <asp:TemplateField HeaderText="Item Picture" 
      ItemStyle-Width="40px" ItemStyle-Height="40px"> 
      <ItemTemplate> 
       <!-- here should be the image --> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:CommandField ButtonType="Button" ShowSelectButton="True" 
      HeaderText="Selecting" /> 
    </Columns> 
</asp:GridView> 

我只知道我的两个选择,当涉及到显示浏览器图像:

  • 节省响应流中的位图。当它呈现给客户端时,这不会在gridview内部(正确?)。
  • 在select语句后在硬盘上保存位图并在模板内部使用图像控件,然后动态分配ImageUrl属性。

第二个选项太昂贵了,因为它需要在每个映像(或数据行)的硬盘上写入和读取。所以我怎么做到这一点?它甚至有可能吗?

ps: ajax不是一个选项。

回答

4

创建一个处理图像的ASP.NET Web Handler(.ashx文件),将图像的id传递给gridview,并创建一个“图像处理器”链接,该图像处理器将显示图像(如果存在)或者可能显示“无图像显示”图片

这里是ASHX文件的快速教程:http://www.dotnetperls.com/ashx

如果你需要它

+0

不用谢了。这很好! – jim 2012-02-20 14:50:40

2

有可能把原始图像数据,我可以张贴额外的代码内联在HTML中。这不是一种常见的技术,但它确实有效 - 详情请参阅http://www.websiteoptimization.com/speed/tweak/inline-images/

需要注意的一些事项:这在所有浏览器上都不起作用 - 例如,就我所知,IE7和更老的浏览器不支持此功能。而且,这不是发送位图的非常节省空间的方式,所以除非它们非常小,否则这是一个糟糕的主意。 (尽管对于足够小的位图,单独下载中涉及的HTTP开销可能会比内联图像的开销略差,而且,如果您可以在服务器上启用对HTTP页面的压缩,那么内联位图看起来稍微差一点)

但是总的来说,你可能更适合安东尼肖所提出的独立处理程序。这很可能是更好的解决方案,除非这些解决方案确实是非常小的图像。

+0

+1 IE7在全球浏览器市场的4%至6%之间,因为这是一个管理工具,如果Jim想要指定产品支持IE8及更高版本,这可能是一个非常快速,容易实现的解决方案。我即将发布相同的内容,但是你打败了我。然而,[Anthony Shaw](http://stackoverflow.com/a/9362925/416518)的反应确实是要走的路,尤其是因为它允许您选择传递图像维度作为查询字符串参数以减少下载尺寸。 – lsuarez 2012-02-20 14:57:52

+0

感谢您的建议! – jim 2012-02-20 22:28:33

相关问题