Отображение двоичного изображения из базы данных в gridview. - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь извлечь двоичное изображение из базы данных и отобразить его в элементе управления GridView.Таблица с именем [student] в моем SQL Server может отображаться внутри GridView, за исключением столбца [Image].Вот мой код на 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;
        }
    }

Из приведенного выше кода я получил сообщение об ошибке из этой строки:введите 'System.Byte []'.

string imageUrl = "data:image/jpg;base64," + Convert.ToBase64String((byte[])dr["Image"]);

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

я использовал telerik radGrid.Пожалуйста, посмотрите.Надеюсь, вы найдете решение

Сетка Столбец

<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>

Код C #

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);
}
0 голосов
/ 25 сентября 2018

Как сказано в сообщении 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;
        }
    }
}

В качестве альтернативы можно использовать проверку Convert.IsDBNull(dr["Image"]), которая возвращаетистина, если dr["Image"] содержит DBNull.Value.

...