[英]Display binary image from database into gridview.
I'm trying to retrieve binary image from database and display it in GridView control. 我正在尝试从数据库检索二进制图像并将其显示在GridView控件中。 A table called [student] in my SQL Server can be displayed inside GridView except for [Image] column. 可以在GridView中显示SQL Server中名为[student]的表,但[Image]列除外。 Here is my c# code trying to retrieve binary image from database: 这是我的C#代码试图从数据库中检索二进制图像:
protected void Page_Load(object sender, EventArgs e)
{
string constr = ConfigurationManager.ConnectionStrings["SAOSConnectionString"].ConnectionString;
using (SqlConnection conn = new SqlConnection(constr))
{
using (SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM student", 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/jpg;base64," + Convert.ToBase64String((byte[])dr["Image"]);
(e.Row.FindControl("Image1") as Image).ImageUrl = imageUrl;
}
}
From the code above, I got an error from this line below: It said Unable to cast object of type 'System.DBNull' to type 'System.Byte[]'. 从上面的代码中,我从下面的行中得到了一个错误:它说无法将类型为“ System.DBNull”的对象转换为类型为“ System.Byte []”。
string imageUrl = "data:image/jpg;base64," + Convert.ToBase64String((byte[])dr["Image"]);
As the InvalidCastException
message said, it is necessary to put if
condition check against DBNull.Value
before converting to byte array: 作为InvalidCastException
消息说,有必要把if
对状态检查DBNull.Value
转换为字节阵列之前:
protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataRowView dr = (DataRowView)e.Row.DataItem;
if (dr["Image"] != DBNull.Value)
{
var imageControl = e.Row.FindControl("Image1") as Image;
var encodedImage = Convert.ToBase64String((byte[])dr["Image"]);
string imageUrl = "data:image/jpg;base64," + encodedImage;
imageControl.ImageUrl = imageUrl;
}
}
}
Alternatively you can use Convert.IsDBNull(dr["Image"])
check which returns true if dr["Image"]
contains DBNull.Value
. 或者,您可以使用Convert.IsDBNull(dr["Image"])
检查,如果dr["Image"]
包含DBNull.Value
,则返回true。
i used telerik radGrid. 我用了Telerik radGrid。 Please have a look. 请看一看。 Hopefully you may find a solution 希望你能找到一个解决方案
<telerik:GridBinaryImageColumn DataField="ImageData" ResizeMode="Fit"
ImageHeight="100px"
HeaderText="Image" AlternateText="No Image" ImageWidth="100px"
UniqueName="ImageData">
<HeaderStyle HorizontalAlign="Left" Width="10%" />
<ItemStyle HorizontalAlign="Left" Font-Size="15px" />
</telerik:GridBinaryImageColumn>
if (req["ImageData"] != DBNull.Value)
{
byte[] imageData = (byte[])req["ImageData"];
string base64String = Convert.ToBase64String(imageData, 0, imageData.Length);
dtRow["ImageData"] = base64String;
_item.ImageData = imageData;
_items.Add(_item);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.