2015-12-31 3 views
0

Я новичок в C# и создаю форму, которая создает кнопки из хранимых значений в базе данных. У меня уже есть изображение, сохраненное в таблице, я не знаю, как добавить изображение таким образомНазначить фоновое изображение на кнопку из базы данных

Вот код

SqlDataAdapter adapt = new SqlDataAdapter("select * from Items order by name", sc); 
DataTable dt = new DataTable(); 
adapt.Fill(dt); 
for (int i = 0; i < dt.Rows.Count; i++) 
{ 
    Button btn = new Button(); 
    btn.Name = "btn" + dt.Rows[i][1]; 
    btn.Tag = dt.Rows[i][2]; 
    btn.BackgroundImage = dt.Rows[i][5]; 
    btn.Text = dt.Rows[i][1].ToString(); 
    btn.Font = new Font("Arial", 12f, FontStyle.Bold); 

    btn.Height = 60; 
    btn.Width = 120; 
    flowLayoutPanel1.Controls.Add(btn); 
} 

Эта ошибка возникает

Ошибка 5 Не удается неявно преобразовать тип 'object' to 'System.Drawing.Image'. Явное преобразование существует (вы пропали без вести литой?)

+3

Так где же' BackgroundImage' назначая часть? Где изображение в вашей базе данных? и больше вопросов, которые вы не объяснили в своем вопросе. –

+0

вот что я пытаюсь найти, как это сделать? –

+0

Попробуйте перейти на WPF вместо WinForms и познакомиться с концепцией привязки данных. Вы легко сможете сделать это с помощью ImageBrush или просто содержимого кнопки, которая больше не ограничивается Text в WPF. – eFloh

ответ

1

Я хотел бы предложить включить колонку, включая изображение в байты, а затем выполните следующие действия:. (Или, может быть, он работает с изображением, а я не уверен)

byte[] data = (byte[]) dt.Rows[i][5]; 
MemoryStream ms = new MemoryStream(data); 
btn.BackgroundImage = Image.FromStream(ms); 

Также this question «s ответы имеет несколько ответов, вы могли бы использовать

+0

Да, это сработало. большое спасибо –

+0

@UzairMalik. Добро пожаловать. Рад, что я мог бы помочь –

+0

@Alex: нам не нужно использовать вокруг потока памяти здесь? Я думаю, что Image.FromStream будет копировать байты, и поток впоследствии должен быть удален. – eFloh