如何在不将图片保存到硬盘的情况下在网格视图行中显示图片
本文关键字:情况下 网格 视图 显示图 保存 硬盘 | 更新日期: 2023-09-27 18:25:22
我正在创建一个购物网站。我有一个绑定到objectdatasource控件的gridview,用于管理任务。这个网格负责显示sqlserver数据库中的items表。每个项目也可能有图片,也可能没有图片。因此,当这个网格显示给管理员时,我希望每个行都有一个相关图像的小缩略图。这是网格视图代码:
<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不是一个选项。
创建ASP。NET Web处理程序(.ashx文件)处理您的图像,将图像的id传递到您的网格视图,并创建一个到该图像处理程序的"链接",该图像处理将显示图像(如果存在),或者可能显示"无图像可用"图像
以下是关于ASHX文件的快速教程:http://www.dotnetperls.com/ashx
如果你需要,我可以发布额外的代码
可以将原始图像数据内联到HTML中。这不是一种常见的技术,但它确实有效http://www.websiteoptimization.com/speed/tweak/inline-images/详细信息。
需要记住的是:这并不是适用于所有浏览器——例如,据我所知,IE7和更早的版本不支持这一点。此外,这不是一种非常节省空间的发送位图的方式,所以除非它们真的很小,否则这是一个糟糕的想法。(尽管对于足够小的位图,单独下载中涉及的HTTP开销可能比内联图像的开销稍差。此外,如果您可以在服务器上启用HTTP页面压缩,那么内联位图看起来就不会那么糟糕了。)
但总的来说,安东尼·肖提出的单独处理方式可能会让你过得更好。这可能是一个更好的解决方案,除非这些真的是非常小的图像。