【问题标题】:How can I show a picture in a gridview row without saving it to the hard drive?如何在 gridview 行中显示图片而不将其保存到硬盘驱动器?
【发布时间】:2012-02-20 14:37:24
【问题描述】:

我正在创建一个购物网站。我有一个绑定到用于管理任务的 objectdatasource 控件的 gridview。这个网格负责显示 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>

在浏览器中显示图像时,我只知道两个选项:

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

第二个选项太昂贵了,因为它需要为每个图像(或数据行)在硬盘驱动器上写入和读取。那么我该怎么做呢?有可能吗?

ps: ajax 不是一个选项。

【问题讨论】:

    标签: c# asp.net gridview


    【解决方案1】:

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

    这里有一个关于 ASHX 文件的快速教程:http://www.dotnetperls.com/ashx

    如果您需要,我可以发布其他代码

    【讨论】:

      【解决方案2】:

      可以将原始图像数据内嵌在 HTML 中。这不是一种常见的技术,但它确实有效 - 有关详细信息,请参阅 http://www.websiteoptimization.com/speed/tweak/inline-images/

      需要记住的一些事情:这不适用于所有浏览器 - 例如,据我所知,IE7 和更早版本不支持此功能。此外,这不是一种非常节省空间的发送位图的方式,所以除非它们真的很小,否则这是一个糟糕的主意。 (尽管对于足够小的位图,单独下载所涉及的 HTTP 开销可能比内联图像的开销稍差。此外,如果您可以在服务器上启用 HTTP 页面的压缩,那么内联位图看起来就不那么糟糕了.)

      但总的来说,使用 Anthony Shaw 提出的单独处理程序可能会更好。除非这些图像真的非常小,否则这可能是一个更好的解决方案。

      【讨论】:

      • +1 IE7 占全球浏览器市场的 4% 到 6%,由于这是一个管理工具,如果 Jim 要指定产品支持 IE8 及更高版本,这可能是一个非常快速、简单可行的解决方案。我正要发布同样的内容,但你打败了我。但是,Anthony Shaw 的响应确实是可行的方法,尤其是因为它允许您选择将图像尺寸作为查询字符串参数传递以减少下载大小。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-28
      • 2019-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多