Member 12663465 Ответов: 1

Нужна помощь в C#, связанная с datagridview с picturebox


[это графический интерфейс C#, который я сделал][1]


[1]: https://i.stack.imgur.com/z6nut.png


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

это мой код...
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.IO;
using System.Drawing.Imaging;

namespace image_upload_retrieve
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

SqlConnection con = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=imagestore; Integrated Security=True;");

SqlCommand cmd;
SqlDataAdapter da;
DataTable dt;

string imgLoc = "";

private void image_Click(object sender, EventArgs e)
{
try
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = "png files(*.png)|*.png|jpg files(*.jpg)|*.jpg|All files(*.*)|*.*";
if (dlg.ShowDialog() == DialogResult.OK)
{
imgLoc = dlg.FileName.ToString();
picEmp.ImageLocation = imgLoc;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

}

private void imagesaving_Click(object sender, EventArgs e)
{
try
{
byte[] img = null;
FileStream fs = new FileStream(imgLoc, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
img = br.ReadBytes((int)fs.Length);
string sql = "INSERT INTO emp values(@img)";
if (con.State != ConnectionState.Open)
{
con.Open();
cmd = new SqlCommand(sql,con);
cmd.Parameters.Add(new SqlParameter("@img",img));
int x = cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("SAVED SUCESSFULLY");
}
}
catch (Exception ex1)
{
con.Close();
MessageBox.Show(ex1.Message);
}
}

private void displayimage_Click(object sender, EventArgs e)
{
string qry = "select * from emp";
cmd = new SqlCommand(qry,con);
da = new SqlDataAdapter(cmd);
dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;
//dataGridView1.RowTemplate.Height = 500;

foreach (DataGridViewRow row in dataGridView1.Rows)
{
row.Height = 300;
}

DataGridViewImageColumn image = new DataGridViewImageColumn();
image = (DataGridViewImageColumn)dataGridView1.Columns[0];
image.ImageLayout = DataGridViewImageCellLayout.Stretch;
}


private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{

//picEmp.ImageLocation = dataGridView1.Rows[1].Cells[0].Value.ToString();
????????
What kind of code should I write here to on click of datagridview
Cell the image should be automatically shown on the picturebox

}

private void button1_Click(object sender, EventArgs e)
{
if (picEmp.Image != null)
{
Image img = picEmp.Image;
picEmp.Image = null;
img.Dispose();
}

}
}
}


Что я уже пробовал:

проблема с этим кодом
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{

//picEmp.ImageLocation = dataGridView1.Rows[1].Cells[0].Value.ToString();
????????
    i above code i have separaete button display on click of it the database pictures are loaded to my datagridview now from datagrid cell click event i want to show up image on my picturebox

What kind of code should I write here to on click of datagridview
Cell the image should be automatically shown on the picturebox

}

1 Ответов

Рейтинг:
2

OriginalGriff

Uue параметр DataGridViewCellEventArgs: он дает вам информацию о том, какая ячейка была нажата.
Класс DataGridViewCellEventArgs (System.Окна.Формы)[^]- в частности, вам нужно свойство RowIndex (и, возможно, ColumnIndex), которое сообщает вам, на какую ячейку был нажат клик.

Из этого и свойства DataGridView Rows вы можете получить доступ к данным изображения в виде байтового массива и загрузить их в поле изображения:

DataGridViewRow row = myDataGridView.Rows[e.RowIndex];
byte[] data = row.Cells[e.ColumnIndex].Value as byte[];
if (data != null)
    {
    MemoryStream ms = new MemoryStream(data);
    myPictureBox.Image = Image.FromStream(ms);
    }