2017-01-22 3 views
0

мне нужно получить изображение из базы данных и показать в GridView здесь код для ObjectDataSource связан с GridView для лучшего понимания дает этот код ... заранее спасибоASP.NET изображения (BLOB) извлечения из базы данных (MySQL)

public static List<Users> GetAllUser() 
{ 
    List<Users> UsersList = new List<Users>(); 

    string connection_string = "datasource=localhost;port=3306;username=root;password=root;"; 
    using (MySqlConnection connection = new MySqlConnection(connection_string)) 
    { 
     MySqlCommand command = new MySqlCommand("select * from smart_shop.users order by id desc", connection); 
     connection.Open(); 
     MySqlDataReader reader = command.ExecuteReader(); 
     while (reader.Read()) 
     { 
      Users userObject = new Users(); 

      userObject.userName = reader["name"].ToString(); 
      userObject.image = reader["image"].ToString(); //Here variable 'image' is string type but in database BLOB    

      UsersList.Add(userObject); 
     } 

    } 

    return UsersList; 
} 

и GridView код

<div class="col-md-6 col-sm-12 col-xs-12"> 
    <div class="panel panel-default"> 
     <h3>&nbsp;&nbsp;User Information</h3> 
     <div class="panel-body"> 

      <asp:GridView ID="GridView2" CssClass="dataGridTable" runat="server" AutoGenerateColumns="False" DataSourceID="ObjectDataSource2" AllowPaging="True" Width="100%" CellPadding="4" HeaderStyle-Height="30" ForeColor="#333333" GridLines="None" OnRowCreated="GridView2_RowCreated" PageSize="20"> 
       <AlternatingRowStyle BackColor="White" /> 
       <Columns> 
        <asp:BoundField DataField="userName" HeaderText="User Name" SortExpression="userName" /> 
        <asp:TemplateField HeaderText="Image" SortExpression="image"> 
         <EditItemTemplate> 
          <asp:Image ID="Image1" runat="server" Height="100px" Width="100px" /> 
         </EditItemTemplate> 
        </asp:TemplateField> 

       </Columns> 

       <EditRowStyle BackColor="#7C6F57" /> 
       <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" /> 
       <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" Height="30px" VerticalAlign="Middle" /> 
       <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" /> 
       <RowStyle BackColor="#E3EAEB" VerticalAlign="Middle" HorizontalAlign="Center" /> 
       <SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" /> 
       <SortedAscendingCellStyle BackColor="#F8FAFA" /> 
       <SortedAscendingHeaderStyle BackColor="#246B61" /> 
       <SortedDescendingCellStyle BackColor="#D4DFE1" /> 
       <SortedDescendingHeaderStyle BackColor="#15524A" /> 
      </asp:GridView> 


      <br /> 
      <asp:ObjectDataSource ID="ObjectDataSource2" runat="server" SelectMethod="GetAllUser" TypeName="OnlineSmartShop.SettingsDataAccessLayer"></asp:ObjectDataSource> 

     </div> 
    </div> 
</div> 

и, наконец,

protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
      byte[] bytes = (byte[])(e.Row.DataItem as DataRowView)["image"]; 
      string base64String = Convert.ToBase64String(bytes, 0, bytes.Length); 
      (e.Row.FindControl("Image1") as Image).ImageUrl = "data:image/png;base64," + base64String; 
    } 
} 
+0

Вы уверены, что о типе содержимого, установленного в ImageUrl? –

+0

Я не понимаю, что вы здесь говорите ImageUrl - это ключевое слово? – Simon

+0

Строка "data: image/png;" добавленный в ImageUrl - это тип содержимого изображения, представляющего тип изображения. Поэтому я предлагаю проверить правильность этого значения в отношении данных изображения. Возможно, изображение jpeg или другой формат. В таких случаях установка png не будет работать. –

ответ

0

reader ["image"] содержит байт []

while (reader.Read()) 
    { 
     Users userObject = new Users(); 

     userObject.userName = reader["name"].ToString(); 
     userObject.image = Convert.ToBase64String((byte[])reader["image"]);    

     UsersList.Add(userObject); 
    } 

и изменение itemdatabound событие. строка типа пункт Пользователи ..

protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      Users rowUser = e.Row.DataItem as Users; 

      (e.Row.FindControl("Image1") as Image).ImageUrl = "data:image/png;base64," + rowUser.image; 
     } 
    } 

PS: Этот метод может вызвать проблемы с производительностью

Смежные вопросы