2017-02-21 13 views
0

У меня есть приложение winform в C# с datagridview witch получает его значения из базы данных sql, но когда я нажимаю одну строку из datagridview, данные отображаются в текстовых окнах, которые нужно отредактировать. Проблема заключается в том, что одним из столбцов, которые можно редактировать, является изображение. я могу загрузить изображение и увидеть его в сетке, но когда я CLIC в rowheader для выбора я получаю сообщение об ошибке: «строка ввода символов с неправильным форматом» Код:picture from datagridview to picturebox

private void dataGridView1_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) 
{ 
    ID = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString()); 

    MemoryStream ms = new MemoryStream((byte[])dataGridView1.CurrentRow.Cells[2].Value); 
    pictureBox1.Image = Image.FromStream(ms); 
    desc2.Text = dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString(); 
    tipo.Text = dataGridView1.Rows[e.RowIndex].Cells[4].Value.ToString(); 
    prumos.Text = dataGridView1.Rows[e.RowIndex].Cells[5].Value.ToString(); 
} 

[[войти описание изображения здесь] [1]] [1] Заранее спасибо,

+0

На какой точной линии вы получаете исключение? Кажется, что это связано с 'Convert.ToInt32' больше, чем изображение ... –

+0

@OfirWinegarten, к сожалению, система не генерирует исключения. Я получаю сообщение об ошибке, форма закрывается, и я возвращаюсь к предыдущей форме. – septaug

+0

@OfirWinegarten Я попытался прокомментировать строку преобразования, и теперь я получаю сообщение об ошибке: Невозможно связать объект типа System.string с System.byte – septaug

ответ

1

Ваша первая проблема исходит от Convert.ToInt32 и не имеет ничего общего с изображением. Убедитесь, что текст содержит только номер.

Вторая проблема с изображения можно сделать так:

var imageCell = (DataGridViewImageCell)dataGridView1.CurrentRow.Cells[2]; 
pictureBox1.Image = (Image)imageCell.Value; 

UPDATE - выше неправильно

Вопрос заключается в неправильных индексов, как написано в комментариях: Правильный код:

MemoryStream ms = new MemoryStream((byte[])dataGridView1.CurrentRow.Cells[0].Value‌​); 
pictureBox1.Image = Image.FromStream(ms); 
+0

Я пробовал ваше решение, но я получаю сообщение об ошибке в строке: pictureBox1.Image = Image.FromStream ((Image) imageCell.Value); не может преобразовать from.system.drawings.image в system.IO.stream – septaug

+0

Упс ошибся .. теперь он должен работать –

+0

Grrr по-прежнему получают ту же ошибку: \ Загрузите снимок экрана из формы, возможно, это еще один Причина – septaug