Sam Oryza Reyno Ответов: 2

Вставка изображения в picturebox с помощью щелчка мыши в DataGridView


Я хочу поместить изображение в свой picturebox, когда я нажимаю на ячейку в своем datagridview, но моя программа всегда останавливается, когда я нажимаю на одну ячейку..

у меня тоже возникли проблемы с тем, как я мог бы привести "образ" в тип данных "байт"..
(к вашему сведению, я использую "varbinary(max)" на своем SQL-сервере, и я хочу преобразовать его в "байт")
кто-нибудь может мне помочь?

private void dataGridView1_MouseClick(object sender, MouseEventArgs e)
{
    DataGridViewRow row;
    row = dataGridView1.CurrentRow;
    Byte[] picture = (Byte[]) row.Cells[5].Value;  //my program always stopped here
    MemoryStream ms = new MemoryStream(picture);
    pictureBox1.Image = Image.FromStream(ms);
}

Sunasara Imdadhusen

В чем ваша ошибка?

Sam Oryza Reyno

Byte[] picture = (байт[]) строка.Ячейки[5].Значение;

когда я запускаю его и дважды щелкаю на своем GridView, моя программа останавливается на этой строке.

dinesh 2010

ладно

BulletVictim

Вы можете попробовать использовать событие CellContentClick в DataGridView.
Если это должно быть в определенном столбце, вам нужно использовать что-то вроде этого.
если(электронная.значение columnindex == я)
{
//ваш код
}
Возможно, я упускаю именно то, о чем вы просите

Sam Oryza Reyno

я обновил свой вопрос на случай двусмысленности.. ты все еще в замешательстве?
(извините, если мой английский вас смущает)

[no name]

Ладно ... отойди на секунду. Является ли содержимое 6 - го столбца вашей сетки массивом байтов? Разве это уже не образ? Знание того, в чем заключается ошибка, которую вы получаете, немного помогло бы. Какое отношение к этому имеет SQL server?

Sam Oryza Reyno

6-й столбец объявлен как Varbinary(max) (я читал какой-то пост о том , как вставить изображение в базу данных, и они сказали, что я должен использовать varbinary datatype)
когда я вставляю изображение, ячейка записывает двоичные данные

Сообщение об ошибке:
Индекс был вне досягаемости. Должно быть неотрицательным и меньше размера коллекции.

SQL Server 2008 R2 ..

2 Ответов

Рейтинг:
2

Member 13144815

//При двойном щелчке на gridview затем textbox и picturebox получают значение и изображения из gridview. мой рабочий код выглядит следующим образом

публичное изображение GetDataToImage(byte[] pData)
{
пробовать
{
ImageConverter imgConverter = новый ImageConverter();
верните imgConverter.ConvertFrom(pData) как изображение;
}
поймать (исключение бывший)
{
Ящик для сообщений.Show(ex.Message, "Error", MessageBoxButtons.Хорошо, MessageBoxIcon.Ошибка);
возвращать null;
}
}
частная dataGridView1_CellDoubleClick недействительным(объект отправителя, EventArgs в электронной)
{
если (dataGridView1.SelectedCells.Count > 0)
{
int selectedrowindex = dataGridView1.SelectedCells[0].Параметр rowindex;

DataGridViewRow selectedRow = dataGridView1.Rows[selectedrowindex];

текстовое поле textbox1.Текст = Конвертировать.ToString(selectedRow.Ячейки[0].Значение);
textBox2.Text = конвертировать.ToString(selectedRow.Ячейки[1].Значение);
picture_photo.Image = GetDataToImage((byte[])(selectedRow.Ячейки[2].Значение));
}

}


CHill60

Вопрос имеет общепринятое решение более чем 4-летней давности. Вы не добавили ничего нового в поток

Рейтинг:
18

Sam Oryza Reyno

Я должен ее решить,,

public Image GetDataToImage(byte[] pData)
        {
            try
            {
                ImageConverter imgConverter = new ImageConverter();
                return imgConverter.ConvertFrom(pData) as Image;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return null;
            }
        }
        //Event Handler CellClick
        private void dgv_ProductData_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            pictureBox1.Image = GetDataToImage((byte[])(dgv_ProductData.CurrentRow.Cells[5].Value));
            pictureBox2.Image = GetDataToImage((byte[])(dgv_ProductData.CurrentRow.Cells[6].Value));
        }


Member 11572517

сэр, r u сейчас онлайн, так что у меня та же проблема , и я попробовал ваше решение, есть одна ошибка на моей стороне, но я покажу вам в вашем коде ,
ошибка при: public Image --GetDataToImage--(byte[] pData), что между тире есть красное подчеркивание, и ошибка: "GetDataToImage(byte[]): не все пути кода возвращают значение."
в чем моя ошибка?
Заранее спасибо.