【问题标题】:Displaying Bitmap Image from Database into GridView with ASP.NET使用 ASP.NET 将位图图像从数据库显示到 GridView
【发布时间】:2021-05-31 02:19:43
【问题描述】:

我目前正在尝试将在 SQL 数据库中存储为 varbinary 的 QR 码位图图像显示到网格视图中,并且我参考了此链接:[https://www.aspsn-ps.com/文章/Display-images-from-SQL-Server-Database-in-ASP.Net-GridView-control.aspx]

但是,我无法在 gridview 表中正确显示图像,而且我似乎无法找出其中的错误。

这是我后面的gridview代码的代码:

      if (!this.IsPostBack)
            {
                using (SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM PARCEL", conn))
                {
                    DataTable dt = new DataTable();
                    sda.Fill(dt);
                    GridView1.DataSource = dt;
                    GridView1.DataBind(); 
                }
            }
        }

        protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                DataRowView dr = (DataRowView)e.Row.DataItem;
                string imageUrl = "data:image/png;base64," + Convert.ToBase64String((byte[])dr["QRCode"]);
                (e.Row.FindControl("QRCode") as Image).ImageUrl = imageUrl;
            }
        }

gridview 的标记:

<asp:GridView 
        ID="GridView1" 
        runat="server" 
        AutoGenerateColumns="False" 
        DataKeyNames="ConsignmentNumber" 
        AllowPaging="True" 
        HorizontalAlign="Center" 
        ViewStateMode="Enabled">

        <Columns>
            <asp:BoundField DataField="ConsignmentNumber" HeaderText="ConsignmentNumber" ReadOnly="True" SortExpression="ConsignmentNumber" /> 
            <asp:BoundField DataField="Status" HeaderText="Status" SortExpression="Status" />
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Image ID="QRCode" runat="server" HeaderText="QRCode" />
                </ItemTemplate>
            </asp:TemplateField>
           
        </Columns>
    </asp:GridView>

我想知道是否有任何解决方案或建议可以应用以正确显示图像。

【问题讨论】:

  • 目前的问题究竟是什么?您的 c# 代码或浏览器是否收到错误消息?正在编译吗?
  • 您是否有意通过注释掉您的代码来将您的数据绑定到GridView1.DataSource=...?
  • @Marco 是的,它正在编译,并且在 c# 代码和浏览器中都没有给出任何错误代码。只是图像在gridview中根本没有显示。
  • 您的 Databind 方法已被注释掉 - 如果您不绑定数据,它将不会呈现任何数据,因此 OnRowbound 事件将永远不会触发。
  • @Marco 很抱歉造成混乱,我已经编辑了我的帖子。我不应该对此发表评论。我已经删除了评论,但它仍然无法正确显示图像

标签: c# sql asp.net sql-server gridview


【解决方案1】:

根据您遇到的错误判断,您已在标记中定义了 DataSourceId,并且正在代码隐藏中设置数据源。你可以做任何一个,但不能同时做。这就是错误告诉您的内容。

<asp:GridView ID="GridView1" runat="server" 
    DataSourceID="yourdatasource">
    <Columns>
       <!-- ... -->
    </Columns>
</asp:GridView>

在您的标记中找到 DataSourceID 并将其删除,就像您在代码隐藏的 cs 文件中设置它一样:

GridView1.DataSource = dt;
GridView1.DataBind(); 

【讨论】:

  • 感谢您的建议。我已经删除了标记中重复的 DataSourceId,现在剩下的唯一数据源在代码隐藏中。它现在运行没有任何错误,但图像仍然没有显示。
  • 请在你的OnRowDataBound设置断点,检查你的数据表的二维码列是否真的填满了数据。如果是这种情况,请检查您的浏览器控制台 (f12) 是否有错误。还请将您的 GridView 标记添加到问题中。
  • 我已将 GridView 标记代码添加到问题中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-22
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
相关资源
最近更新 更多