• Status: Solved
• Priority: Medium
• Security: Public
• Views: 8097

# how to set image to DataGridViewImageColumn from image path?

hi,

I have datatable which have 3 columns id, name, imgPath
imgPath has full path of the image, such as D:/someimage.jpg

I want to set each image of its relative path to DataGridViewImageColumn that I have created in DataGridView,

so how can I do that?
0
njgroup
2 Solutions

Commented:
you will have to replace the text until the root directory of your website.

For let's say D:/websites/website1/images/img1.jpg and if the root directory is D:/websites/website1, you need to replace it with string.empty or "" so, you will have /images/img1.jpg

You can store D:/websites/website1 as a key in your web.config file so when you deploy your application, by changing the key with new path, you will have the same result.
0

Commented:
0

Author Commented:
hi,

this is not asp.net application, its windows application
0

Commented:
Check if this helps or not,
``````private void CreateColumns()
{
DataGridViewImageColumn imageColumn;
Bitmap bmpImage = null;
imageColumn = new DataGridViewImageColumn();
bmpImage = (Bitmap)Image.FromFile(@"C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Blue hills.JPG", true);
imageColumn.Image = bmpImage;
imageColumn.ImageLayout = DataGridViewImageCellLayout.Stretch;
dataGridView1.Rows[0].Cells[0].Value = bmpImage;
dataGridView1.Rows[0].Height = 100;

}
``````
0

Commented:
Private Sub CreateColumns()
Dim imageColumn As DataGridViewImageColumn
Dim bmpImage As Bitmap = Nothing
imageColumn = New DataGridViewImageColumn()
bmpImage = DirectCast(Image.FromFile("C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Blue hills.JPG", True), Bitmap)
imageColumn.Image = bmpImage
imageColumn.ImageLayout = DataGridViewImageCellLayout.Stretch
dataGridView1.Rows(0).Cells(0).Value = bmpImage
dataGridView1.Rows(0).Height = 100

End Sub
0

Author Commented:
but what if I have datatable, and it has imgPath column as image path,

I have created the DataGridViewImageColumn, but I need now foreach loop to go for each path and assign it to DataGridViewImageColumn cell, and the imgPath column should be hidden
0

Author Commented:
your code does not change the image of the cell:

foreach (DataGridViewRow row in dgvProductsGridTMP.Rows)
{
string imgPath = System.IO.Path.Combine("Z:\\", row.Cells["ImgPath"].Value.ToString());
Bitmap b = new Bitmap(imgPath);
dgvProductsGridTMP.Rows[row.Index].Cells["productImage"].Value = b;
}
0

Commented:
What about now? You have to take image from the file, use (Bitmap)Image.FromFile(imgPath , true); instead of new Bitmap(imgPath);
``````foreach (DataGridViewRow row in dgvProductsGridTMP.Rows)
{
string imgPath = System.IO.Path.Combine("Z:\\", row.Cells["ImgPath"].Value.ToString());
Bitmap b = (Bitmap)Image.FromFile(imgPath , true);

dgvProductsGridTMP.Rows[row.Index].Cells["productImage"].Value = b;
}
``````
0

Author Commented:
no, here is my code:

foreach (DataGridViewRow row in dgvProductsGridTMP.Rows)
{
string imgPath = System.IO.Path.Combine("Z:\\", row.Cells["ImgPath"].Value.ToString());
row.Cells["productImage"].Value = (Bitmap)System.Drawing.Image.FromFile(imgPath, true);
}
0

Commented:
Your code works perfectly for me. Can u  provide me with more code if u don't mind? U've included the extension of the image rite?
Can u plz check if file exists in the directory, later u can remove that code....
``````foreach (DataGridViewRow row in dgvProductsGridTMP.Rows)
{
string imgPath = System.IO.Path.Combine("Z:\\", row.Cells["ImgPath"].Value.ToString());
if (System.IO.Directory.Exists(imgPath ))
{
row.Cells["productImage"].Value = (Bitmap)System.Drawing.Image.FromFile(imgPath, true);
}
else
{
MessageBox.Show("Invalid Path");
}
}
``````
0

Author Commented:
yes, I got invalid path!

but there is something strange

I had checkpoint in imgPath variable, I took the complete value pf imgPath from "Text Visualizer"  (which representing the full path "Z:\images\175.png"), and I put it in address bar of windows explorer, so, I can see the image, I dont know why it gives me incorrect path in my code!

please note that this path representing mapped driver, I have code to map a driver, and I can see mapped drive in my computer and open the image from there, and it looks like any driver (C, D, ...)

but its not working from my code!
0

Author Commented:
I got the UNC path of Z: drive (\\192.168.1.157\d\$\ProductManagmentSystem\images\175.png) and that is not working for me too
0

Commented:
I'm sorry njgroup, i made a terrible mistake, as "mas_oz2003" pointed out in http://www.experts-exchange.com/Programming/Languages/.NET/Visual_CSharp/Q_26914351.html it is not  "Directory.Exists", instead it is "File.Exists" . I replied in hurry, so i used "Directory.Exists" without thinking.... Once again sorry for the trouble....

And as for mapped driver, plz ensure u've sufficient permission granted for accessing the image.....
0

Author Commented:
ok,
I solve the problem of network path
but the image does not displayed in data grid view, and it is displayed in normal picturebox!!!!!

foreach (DataGridViewRow row in dgvProductsGridTMP.Rows)
{
string imgPath = @"E:\Leamra Projects\ProductManagment\images\cam_product.png";
if (System.IO.File.Exists(imgPath))
{
pictureBox1.Image = System.Drawing.Image.FromFile(imgPath, true); \\ here it is showing the image
row.Cells["productImage"].Value = System.Drawing.Image.FromFile(imgPath, true); \\ here it is not showing the image
}
else
{
MessageBox.Show("Invalid Path");
}
}
0

Commented:
Hi,

Try to use Image property instead of Value like this

foreach (DataGridViewRow row in dgvProductsGridTMP.Rows)
{
string imgPath = @"E:\Leamra Projects\ProductManagment\images\cam_product.png";
if (System.IO.File.Exists(imgPath))
{
pictureBox1.Image = System.Drawing.Image.FromFile(imgPath, true); \\ here it is showing the image
row.Cells["productImage"].Image = System.Drawing.Image.FromFile(imgPath, true); \\ here it is not showing the image
}
else
{
MessageBox.Show("Invalid Path");
}
}
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.