如何在不将图片保存到硬盘的情况下在网格视图行中显示图片

本文关键字:情况下 网格 视图 显示图 保存 硬盘 | 更新日期: 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页面压缩,那么内联位图看起来就不会那么糟糕了。)

但总的来说,安东尼·肖提出的单独处理方式可能会让你过得更好。这可能是一个更好的解决方案,除非这些真的是非常小的图像。

相关文章: