我正在创建一个购物网站。我有一个gridview绑定到一个objectdatasource控件用于管理任务。此网格负责显示sql server数据库中的items表。每个项目也可能有也可能没有图片。因此,当向管理员显示此网格时,我希望相关图像的小缩略图可用于每一行。这是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>
我只知道在浏览器中显示图片时有两个选项:
第二个选项太昂贵,因为它需要在硬盘上为每个图像(或数据行)写入和读取。那怎么能这样呢?它甚至可能吗?
ps: ajax不是一个选项。
答案 0 :(得分:4)
创建一个处理图像的ASP.NET Web处理程序(.ashx文件),将图像的id传递给gridview,并创建一个指向该图像处理程序的“链接”,如果图像存在,则显示该图像,或者可能会显示“无图像可用”图像
以下是ASHX文件的快速教程:http://www.dotnetperls.com/ashx
如果您需要,我可以发布其他代码
答案 1 :(得分:2)
可以将原始图像数据内嵌到HTML中。这不是一种常用的技术,但确实有效 - 有关详细信息,请参阅http://www.websiteoptimization.com/speed/tweak/inline-images/。
有些事情需要牢记:这并不适用于所有浏览器 - 例如,就我所知,IE7及更早版本不支持此功能。此外,这不是一个非常节省空间的方式来发送位图,所以除非它们真的很小,否则这是一个糟糕的主意。 (虽然对于足够小的位图,单独下载中涉及的HTTP开销可能比内联映像的开销略差。此外,如果您可以为服务器上的HTTP页启用压缩,那么内联位图看起来会稍微不那么糟糕。)
但总的来说,你可能会更好地使用Anthony Shaw提出的单独处理程序。这可能是一个更好的解决方案,除非这些图像非常小。